我希望使用CoreLocation
框架获取当前位置,并且我在AppDelegate中执行此操作,因为我的应用中的视图需要结果longitude
和latitude
以下方法获取当前位置:
(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}}内调用此方法,同样的问题出现了,可能的解决方案是什么?提前谢谢
答案 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
}