暂停某个方法直到CllocationManager完成

时间:2014-11-07 23:05:37

标签: ios objective-c cocoa-touch

我有一个方法(methodA)在应用程序使用UIApplicationWillEnterForegroundNotification进入前台时执行,然后调用这些方法我调用CLLocationManager' startUpdatingLocation方法,我希望methodA被执行只有当startUpdatingLocation完成时,我才会这样做:

- (void)applicationEnteredForeground:(NSNotification *)notification {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
        [self.manager startUpdatingLocation];

});
dispatch_group_notify(group, queue, ^{
    [self methodA];
});
}

问题是methodAstartUpdatingLocation完成之前仍然调用,有关如何做到的任何想法吗?

2 个答案:

答案 0 :(得分:0)

当您调用startUpdatingLocation时,您的locationManager启动(并且不停止)以接收新位置。如果你想在有位置时做点什么,你应该实现locationManagerDelegate,(抱歉我没有我的电脑,我通过内存说话)和方法locationManager:didReceiveLocations,(或类似的东西)。

答案 1 :(得分:0)

简短的回答是:你没有。这不是位置管理器和其他异步iOS框架的设计方式。

正如Onik所说,您应该将对象(通常是视图控制器)设置为位置管理器的委托。

CLLocationManagerDelegate的Xcode帮助中搜索。具体来说,您需要locationManager:didUpdateLocations:方法。

当您这样做时,当位置更新可用时,将调用locationManager:didUpdateLocations:方法。然后,您需要检查位置更新以确保它不旧,并确保准确性值是可接受的。 (从位置管理器获得的第一个读数可能是上次GPS处于活动状态时读取的非常旧的缓存位置。之后,前几个更新可能具有非常差的准确度值。可能需要10秒或更长时间才能完成GPS定居并开始给出合理的读数,有时它永远不会(特别是在室内)。