iPhone需要更新多个控制器中的位置
|
我试图在多个控制器上获取用户的当前位置,它们是导航控制器,tabbarcontroller,presentmodel控制器的一部分,因此基本上我真的不能做诸如self.navigationcontroller或self.tabBarController之类的事情。
我所做的是我创建了LocationHelper和LocationHelperDelegate
@protocol LocationHelperDelegate
@required
- (void)locationUpdate:(CLLocation *)location; // Our location updates are sent here
- (void)locationError:(NSError *)error; // Any errors are sent here
@end
@interface LocationHelper : NSObject <CLLocationManagerDelegate>{
CLLocationManager *locationManager;
CLLocation *currentLocation;
id delegate;
}
@property (nonatomic, retain) CLLocation *currentLocation;
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, assign) id delegate;
@end
然后在我的.m文件中执行以下操作
-(id) init {
self = [super init];
if(self != nil){
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self;
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation
*)newLocation fromLocation:(CLLocation *)oldLocation {
if([self.delegate conformsToProtocol:@protocol(LocationHelperDelegate)]) {
[self.delegate locationUpdate:newLocation];
}
}
现在这就是我在所有需要位置更新的控制器中正在做的事情。
在init方法中
LocationHelper* locationHelper = [[LocationHelper alloc]init];
locationHelper.delegate = self;
[locationHelper.locationManager startUpdatingLocation];
然后我实现
- (void)locationUpdate:(CLLocation *)location {
latitude = location.coordinate.latitude;
longitude = location.coordinate.longitude;
[locationHelper.locationManager stopUpdatingLocation];
}
我100%确信这样做不是正确的方法,但是我不知道应该如何做。基本上,我需要做的只是一次startUpdatingLocation,然后我的所有控制器都收到一个有关locationUpdate的通知,并且当每个人都收到了stopUpdatingLocation通知时。
我当时正在考虑让LocationHelper类具有单例,但是当所有控制器都获得它的实例时,他们可以将它们自身设置为委托,这似乎不正确,因为委托是LocationHelper中的实例变量之一,并且它只能容纳一个值。
如您所见,我很困惑,请帮助。
没有找到相关结果
已邀请:
3 个回复
凸晴
要订阅上述通知,请使用以下代码。不是该名称:与上面的postNotificationName:匹配。通过这种方式,您可以根据需要调度和订阅多个通知。
这是如何访问传递到选择器的自定义用户数据的原型:如上定义。因为我可能想传递多个数据,所以我通过NSDictionary发送了数据。
帆攀缺锯欧
这样,您所有的位置获取/管理/存储位置都可以在一个位置上找到,您可以从应用程序中的任何位置访问该位置,并使所有内容保持整洁 编辑:在回答问题“按键值观察,您是指通知”时,答案是否定的。它们是完全不同的东西。 在任何视图控制器中-可能在viewDidLoad中-您可以说:
然后执行:
您在该方法的参数中对该键所做的更改有很多详细信息,但是可能更简单的方法是返回到委托并获取您要查找的值。 可能想在viewDidUnload中删除该观察者:
唤副埂侧壬