我正在使用Grand Central Dispatch
启动本地化请求:
- (void) findGroceriesNearMe {
dispatch_queue_t downloadQueue = dispatch_queue_create("Groceries downloader", NULL);
dispatch_async(downloadQueue, ^{
CLLocationCoordinate2D userLocation = [LocationManagerController findMeWithCaller:self];
dispatch_async(dispatch_get_main_queue(), ^{
[self userSuccessFullyFound:userLocation];
});
});
dispatch_release(downloadQueue);
}
它在我的Singleton类LocationManager控制器中调用静态方法:
+ (CLLocationCoordinate2D) findMeWithCaller: (UIViewController *) viewController {
LocationManagerController *locationManagerController = [LocationManagerController locationManagerController];
[locationManagerController startUpdates];
while(![locationManagerController getterDone]){
//mystique pour nous-- a approfondir
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
在startUpdates方法中,CLLocationManager
的{{1}}属性已初始化并询问LocationManagerController
。
最后,当位置更新发生时的方法:
startUpdatingLocation
我的问题是,locationManager只发送3个位置更新,然后停止发送更新,即使我没有要求它停止。所以基本上,我永远不会离开(![locationManagerController getterDone])循环。
顺便说一下,在尝试使用GCD实现它之前,它运行正常,所以我猜这个问题与我的多线程实现有关。
有什么想法吗?
修改
我在控制台中没有收到任何错误。该程序只是继续运行,但我陷入了循环,并且在3个第一个位置更新后没有其他任何事情发生。
谢谢!
答案 0 :(得分:3)
来自CLLocationManager类引用:
您的位置管理器对象的配置必须始终在a上进行 具有活动运行循环的线程,例如应用程序的主循环 线程。
答案 1 :(得分:0)
if (newLocation.horizontalAccuracy <= manager.desiredAccuracy)
所以你可能会陷入困境。在办公桌前尝试更高的准确性。还要考虑精确度是否永远不会超出你想要的,因为它可能是gps接收不好。
请告诉我,如果这有用,或者如果我不合时宜: - )
- Fasttouch