【发布时间】:2011-09-24 09:44:22
【问题描述】:
有时在我的应用上获取位置坐标时会出现问题。
我一直在测试我的应用程序从模拟器和坐在我家中的 iphone 的位置坐标(这不仅仅是我的家,我在不同的位置(室外)以及非常好的网络连接进行了测试),并且我看到这种有线行为,我现在有正确的坐标,然后我将应用程序发送到后台并将它带回来我得到正确的位置坐标,如果我这样做 8-10 次(即发送到背景并将其带到前台)有时在应用程序从后台运行后我无法获取位置坐标,此时获取位置坐标的唯一方法是杀死应用程序然后重新开始。所以我确定有些事情出了问题,但我不确定是什么。
这就是我正在做的事情
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
//if the time interval returned from core location is more than 30 seconds we ignore it because it might be from an old session
if ( abs([newLocation.timestamp timeIntervalSinceDate: [NSDate date]]) < 30) {
if(newLocation.coordinate.latitude != previousLocation.coordinate.latitude && newLocation.coordinate.longitude != previousLocation.coordinate.longitude){
if(newLocation.horizontalAccuracy <= 100){
[self.locationManager stopUpdatingLocation];
[self.locationManager startMonitoringSignificantLocationChanges];
}
else{
[self.locationManager startUpdatingLocation];
}
所以基本上我只在新位置不超过 30 秒时才使用它,并且它与我在本地存储的先前位置不同并且水平精度小于 100 米。当我在调试器中运行它时,我观察到的是我到达第一个 if 条件 3-4 次,如果它失败了,它不会在那之后出现,这意味着根本不会调用 didUpdateToLocation。
一旦坐标符合我的所有标准,我就会停止更新位置并开始监测重要位置变化。
我在 else 块中执行 startUpdatingLocation 的原因是。
例如,如果由于 startMonitoringSignificantLocationChanges 而调用了 didUpdateToLocation,我想在那之后获得准确的位置,所以每次我没有得到我正在寻找的正确位置时我都会执行 startUpdatingLocation,因为我相信执行多个 startUpdatingLocation 不会不伤害任何东西。
如果我的思维过程或代码逻辑有问题,请告诉我。
【问题讨论】:
标签: iphone core-location cllocationmanager