didUpdateToLocation 调用了两次,好的。为啥 oldLocation 两次都为零?

Posted

技术标签:

【中文标题】didUpdateToLocation 调用了两次,好的。为啥 oldLocation 两次都为零?【英文标题】:didUpdateToLocation called twice, ok. Why is oldLocation nil both times?didUpdateToLocation 调用了两次,好的。为什么 oldLocation 两次都为零? 【发布时间】:2015-06-25 08:31:05 【问题描述】:

我知道在大多数情况下,CLLocationManager 在初始化时会被调用两次,once with cached location data, and once with updated content。

这是有道理的,即使它在两种情况下都返回相同的结果(例如:因为模拟位置总是返回相同的坐标和精度)。

这是我启动过程的日志。 didUpdateToLocation 调用了两次,两次 oldLocation 都是 nil:

// Setup code:
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.distanceFilter = 100.0
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()

// Log Output:
locationManager didUpdateToLocation 
old: nil 
new: <+22.28468100,+114.15817700> +/- 5.00m (speed -1.00 mps / course -1.00) @ 6/25/15, 3:21:57 PM Indochina Time

locationManager didUpdateToLocation 
old: nil 
new: <+22.28468100,+114.15817700> +/- 5.00m (speed -1.00 mps / course -1.00) @ 6/25/15, 3:22:01 PM Indochina Time

没有意义的是oldLocation 在这些情况下总是为零。我必须提供一个名为actualOldLocation 的外部变量来跟踪更新之间的距离变化。我做错了什么导致这个值为零吗?

【问题讨论】:

【参考方案1】:

您的目标是什么 ios? didUpdateToLocation 已从 iOS 6.0 中弃用,不确定它现在是否可以完全正常工作。

【讨论】:

...doh。那,呃,解释了奇怪。但说真的,AnyObject 的数组?那是改良版? 这解释了为什么旧 api 不再返回 oldLocation ——locations.count 始终为 1:第一次运行时、第二次非缓存更新时以及更改模拟器位置时。我对这个解释很满意。

以上是关于didUpdateToLocation 调用了两次,好的。为啥 oldLocation 两次都为零?的主要内容,如果未能解决你的问题,请参考以下文章

ViewDidLoad 调用了两次

didRegisterUserNotificationSettings 被调用了两次?

ListSelectionListener 调用了两次

Cedar - 检查是不是使用不同的值调用了两次方法

OnLoadFinished() 调用了两次

Spring Security 自定义 AuthenticationProvider 验证方法调用了两次