当locationManager:didUpdateLocations:
(或其弃用的等效locationManager:didUpdateToLocation:fromLocation:
)消息发送到CLLocationManagerDelegate
时,CLLocationManagerDelegate Protocol Reference说明:
当此消息传递给您的代理时,新的 位置数据也可以直接从CLLocationManager获得 宾语。 newLocation参数可能包含缓存的数据 从之前使用的位置服务。你可以使用 location对象的timestamp属性,用于确定最近的位置 位置数据是。
但是,实际上,CLLocationManager
的{{1}}属性未更新。为什么不呢?
我创建了一个示例项目来演示这个: https://github.com/sibljon/CoreLocationDidUpdateToLocationBug
相关代码位于location
,其片段如下:
JSViewController
答案 0 :(得分:1)
我认为这是一个错误,我已经向Apple提交了一份错误报告。可以在Open Radar上找到错误报告的镜像:
答案 1 :(得分:0)
正如您在文档中所读到的,locationManagerDelegate可能会将缓存数据传递给回调方法。
实际上这种情况经常发生,所以您需要做的是检查newLocation
对oldLocation
或当前时间的时间戳,看看它们是否足够不同(多少与您有所不同)根据您的应用需求决定。
以下是您如何根据当前时间进行检查的片段:
if ([newLocation.timestamp timeIntervalSinceNow] < 600) // 10 minutes