我正试图在iPhone模拟器上获得实际位置。但我总是得到缓存的结果。我的问题与this和this question有关。我正在使用LocateMe示例中的代码:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if (locationAge > 5.0) return;
if (newLocation.horizontalAccuracy < 0) return;
if (bestEffortAtLocation == nil || bestEffortAtLocation.horizontalAccuracy > newLocation.horizontalAccuracy) {
self.bestEffortAtLocation = newLocation;
if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {
[locationManager stopUpdatingLocation];
locationManager.delegate = nil;
latitude = newLocation.coordinate.latitude;
longitude = newLocation.coordinate.longitude;
}
}
}
但这似乎不正常:
if (locationAge > 5.0) return;
如果GPS坐标超过5秒,则该方法将返回。但在我的情况下(iPhone模拟器),该方法只被调用一次。因此退出该方法不是一个好主意。如果我在方法的开头提取位置,我会得到缓存结果。在上面的代码示例中,我永远不会得到一个坐标。
我错过了什么?
修改1:
iPod touch上的一切正常。
编辑2:
如何强制locationManager更新其位置? distanceFilter
设置为kCLDistanceFilterNone
,但它没有检测到位置变化了几公里。
我如何知道位置数据准备好了?例如。位置更新每10秒钟一次,我是否需要暂停?因为我的应用程序立即获取现有值,并且不等待位置管理器准备就绪。
编辑3:
大约一分钟后我得到
错误:无法完成操作。 (kCLErrorDomain错误0。)
我启用了wifi,iPod touch和MacBook Pro在同一个SSID中。我做错了什么?
编辑4:
似乎是Xcode 3.2.4和iOS 4.1的问题。另见here。我并不孤单:CLLocationManager on iPhone Simulator fails with kCLErrorDomain Code=0(Google上有更多结果)
编辑5:
在iOS 4中,Apple使用自己的数据库进行地理定位。但我不明白为什么iPod和MBP之间存在差异。
编辑6:
本地化在iPad上也不起作用。有人提出解决方案吗?