CLLocationManager在缓存中存储以前(旧)的位置多长时间



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

问题出在iPad2上。我的应用程序在一周左右没有重新启动设备的情况下运行,但[CLLocationManager location]经常返回nil。例如,我昨天在iPad上打开了谷歌地图应用程序,收到消息"无法确定位置",因此[CLLocationManager location]在我的应用程序中返回了nil。然后我按下谷歌地图应用程序中的位置箭头图标,然后谷歌地图应用显示我的当前位置。此外,[CLLocationManager location]在我的应用程序中返回了一些位置。然而,同样的问题今天仍然存在——[CLLocationManager location]再次返回nil,所以我猜CLLocationManager会在一段时间后丢弃位置缓存,如果你不使用设备移动,那么你将不会得到任何已知的先前位置。有什么想法可以解决这个问题,并在没有位置的情况下强制CLLocationManager检索任何位置吗?

文档

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

@属性(只读,非原子)CLLocation*位置

讨论

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

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

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

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

最新更新