【问题标题】:Is it possible to get out of order didUpdateLocations when using allowDeferredLocationUpdatesUntilTraveled使用allowDeferredLocationUpdatesUntilTraveled时是否可能出现故障didUpdateLocations
【发布时间】:2015-01-09 11:22:41
【问题描述】:

我已将[CLLocation allowDeferredLocationUpdatesUntilTraveled: timeout] 添加到我的应用程序中。大多数时候一切正常。当我打开延迟位置中间的屏幕时,我会时不时地获得当前位置。位置管理器是否有可能向我的应用程序发送当前位置的locationManager:didUpdateLocations:,然后使用一系列延迟位置调用它?关于传递给locationManager:didUpdateLocations Apple 文档的位置

这个数组总是包含至少一个对象,代表 当前位置。如果更新被推迟或多个位置 在交付之前到达,阵列可能包含 附加条目。 数组中的对象被组织在 它们发生的顺序。因此,最近的位置 更新在数组的末尾。

我没有看到任何关于didUpdateLocations 被调用的顺序。是否可以保证以正确的顺序调用委托方法 didUpdateLocations?

谢谢!

斯蒂芬

【问题讨论】:

    标签: ios gps core-location cllocationmanager cllocation


    【解决方案1】:

    所以我在 developer.apple.com (https://devforums.apple.com/thread/251363?tstart=0) 上找到了答案。基本上,是的,这可能发生。当设备唤醒时,它首先为您的当前位置发送一些单独的位置,然后发送延迟的位置。这符合我看到的行为。以下是 developer.apple.com 的回复。

    我正在“清理”时间戳,以便我的后续代码能够 不要被时间倒流所迷惑。我以为我允许 这在延迟模式下通过对一批延迟位置进行排序 收据上的时间戳,但实际上我做得还不够。什么 实际上似乎在设备在延迟一段时间后唤醒时发生 是它首先发送几个单独的位置, 当前时间戳,然后发送大量保存的 GPS 定位。 所以教训是,如果你要尝试对你的位置进行排序 修复您需要处理的不仅仅是单个延迟批次。你 确实需要将新位置合并到您以前收到的位置 位置,尽可能返回。不幸的是 延迟模式很难调试。

    【讨论】:

      猜你喜欢
      • 2019-02-07
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多