加载所有视图后调用CLLocationManager didUpdateToLocation

时间:2014-02-06 14:03:52

标签: ios iphone objective-c ios7

我希望使用CoreLocation框架获取当前位置,并且我在AppDelegate中执行此操作,因为我的应用中的视图需要结果longitudelatitude以下方法获取当前位置:

(void)loadCurrentLocation{
NSLog(@"loadCurrentLocation");
if (manager==nil) {
    manager=[[CLLocationManager alloc]init];
}

 manager.delegate=self;
 manager.desiredAccuracy=kCLLocationAccuracyBest;
 [manager startUpdatingLocation];

}

鉴于经理在AppDelegate.h中声明如下:

CLLocationManager *manager;

我在AppDelegate的willFinishLaunchingWithOptions方法中调用上面的方法, 问题是在所有视图加载后调用所有视图具有很多逻辑通用的didUpdateToLocation方法!我希望在任何viewDidLoad方法之前调用此方法,以便根据didUpdateToLocation执行某些逻辑 注意:我试图在+(void)initialise的{​​{1}}内调用此方法,同样的问题出现了,可能的解决方案是什么?提前谢谢

2 个答案:

答案 0 :(得分:0)

startUpdatingLocation是一种异步方法which may take several seconds

您应该实现一些逻辑来通知您关于(或让您的视图控制器监听)当前位置更改的视图,然后正确更新您的UI。

不要依赖主线程中的异步方法/回调。

答案 1 :(得分:0)

在didUpdateLocations上发布此通知,如下所示:

- (void)locationManager:(CLLocationManager *)manager 
     didUpdateLocations:(NSArray *)locations
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"LocationUpdate" object:locations];
}

然后在每个视图的viewDidLoad上注册“LocationUpdate”通知,然后根据您的编程逻辑处理它。

- (void)viewDidLoad {
    [super viewDidLoad];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(LocationUpdate:) name:@"LocationUpdate" object:nil];
}
-(void)LocationUpdate:(NSArray*)locations
{
//handle location update here
}