0

大多数时候,开发人员都在询问如何过滤旧的缓存位置,但是我对相反的事情感兴趣 - 如何保留和获取旧位置:) 这是我的情况:我的应用程序中有天气屏幕,我正在下载天气预报对于当前位置。应用程序一启动,我就会以 1 公里的精度开始标准位置更新,并将接收到的位置保存在我的定位器类私人成员中。如果应用没有收到任何位置更新,那么它需要显示任何已知的先前位置——比如从 [CLLocationManager 位置] 中抓取一个。

问题出在 iPad2 上。我的应用程序在没有设备重启的情况下运行了大约一周,但 [CLLocationManager location] 非常频繁地返回 nil。例如,我昨天在 iPad 上打开了 google maps 应用程序并收到消息“无法确定位置”,因此 [CLLocationManager location] 在我的应用程序中返回 nil。然后我在谷歌地图应用程序中按下位置箭头图标,然后谷歌地图应用程序显示我当前的位置。此外,[CLLocationManager location] 在我的应用程序中返回了某个位置。但是,今天仍然存在同样的问题 - [CLLocationManager location] 再次返回 nil,所以我猜 CLLocationManager 会在一段时间后丢弃位置缓存,如果您不使用设备移动,那么您将不会获得任何已知的先前位置。任何想法如何解决这个问题并强制 CLLocationManager 检索任何位置(如果它为零)?

4

1 回答 1

0

文档

最近检索到的用户位置。(只读)

@property(readonly, nonatomic) CLLocation *location

讨论

如果从未检索到任何位置数据,则此属性的值为 nil。

在 iOS 4.0 及更高版本中,此属性可能在启动时包含更新的位置对象。具体来说,如果正在运行重要的位置更新并且您的应用程序已终止,则此属性会在您的应用程序重新启动时使用最新的位置数据进行更新(并且您创建一个新的位置管理器对象)。此位置数据可能比您的应用程序处理的最后一个位置事件更新。

检查存储在此属性中的位置的时间戳总是一个好主意。如果接收器当前正在收集位置数据,但最小距离过滤器很大,则返回的位置可能相对较旧。如果是,您可以停止接收器并重新启动它以强制更新。

它将尽可能长时间地存储在缓存中,没有超时。如果使用位置服务的东西未能获得任何位置,它可能会将其设置为 nil。

于 2012-12-11T15:11:12.367 回答