发送CLLocationManagerDelegate消息时,为什么不更新[CLLocationManager位置]?

时间:2013-02-07 19:40:55

标签: ios core-location cllocationmanager

locationManager:didUpdateLocations:(或其弃用的等效locationManager:didUpdateToLocation:fromLocation:)消息发送到CLLocationManagerDelegate时,CLLocationManagerDelegate Protocol Reference说明:

  

当此消息传递给您的代理时,新的   位置数据也可以直接从CLLocationManager获得   宾语。 newLocation参数可能包含缓存的数据   从之前使用的位置服务。你可以使用   location对象的timestamp属性,用于确定最近的位置   位置数据是。

但是,实际上,CLLocationManager的{​​{1}}属性未更新。为什么不呢?

我创建了一个示例项目来演示这个: https://github.com/sibljon/CoreLocationDidUpdateToLocationBug

相关代码位于location,其片段如下:

JSViewController

2 个答案:

答案 0 :(得分:1)

我认为这是一个错误,我已经向Apple提交了一份错误报告。可以在Open Radar上找到错误报告的镜像:

http://openradar.appspot.com/radar?id=2682402

答案 1 :(得分:0)

正如您在文档中所读到的,locationManagerDelegate可能会将缓存数据传递给回调方法。

实际上这种情况经常发生,所以您需要做的是检查newLocationoldLocation或当前时间的时间戳,看看它们是否足够不同(多少与您有所不同)根据您的应用需求决定。

以下是您如何根据当前时间进行检查的片段:

    if ([newLocation.timestamp timeIntervalSinceNow] < 600) // 10 minutes