1

出于某种原因,didUpdateToLocation:fromLocation: 并不总是在 CLLocationManagerDelegate 中调用。奇怪的是,在第一次运行时一切都很好。

检查 [CLLocationManager 授权状态] - 它始终等于 kCLAuthorizationStatusAuthorized。

开始更新位置的代码:

locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.delegate = self;
[locationManager startUpdatingLocation];

PS 我正在使用 XCode 5 DP 模拟器。

4

1 回答 1

0

对初始化委托方法的方法的扩展讨论揭示了在人们可​​能期望的情况下未调用委托的一些情况。我已经从文档中提取了这个......请告知这是否足以回答这个问题。

此方法立即返回。调用此方法会导致位置管理器获取初始位置修复(可能需要几秒钟)并通过调用其 locationManager:didUpdateLocations: 方法通知您的委托。(在 iOS 5 和更早的版本中,位置管理器调用 locationManager:didUpdateToLocation:fromLocation: 方法。)之后,接收器主要在超过 distanceFilter 属性中的值时生成更新事件。不过,可能会在其他情况下提供更新。例如,如果硬件收集到更准确的位置读数,接收器可能会发送另一个通知。

连续多次调用此方法不会自动生成新事件。但是,在这两者之间调用 stopUpdatingLocation 确实会在您下次调用此方法时发送一个新的初始事件。

如果您启动此服务并且您的应用程序被挂起,系统将停止传递事件,直到您的应用程序再次开始运行(无论是在前台还是在后台)。如果您的应用程序终止,则新位置事件的传递将完全停止。因此,如果您的应用程序需要在后台接收位置事件,它必须在其 Info.plist 文件中包含 UIBackgroundModes 键(带有位置值)。

于 2013-10-26T02:02:08.620 回答