大多数时候开发人员都在询问如何过滤旧的缓存位置,但是我对相反的事情感兴趣 - 如何保存和获取旧位置:)这是我的情况:我的应用程序中有我的天气屏幕我在哪里下载当前位置的天气预报。应用程序启动后,我将以1km的准确度开始标准位置更新,并在我的定位器类私有成员中保存接收的位置。如果应用程序未收到任何位置更新,则需要显示任何已知的先前位置 - 例如从[CLLocationManager位置]中抓取一个位置。
问题出在iPad2上。我的应用程序在没有设备重启的情况下运行大约一周,但[CLLocationManager位置]非常频繁地返回nil。例如,我昨天在iPad上打开谷歌地图应用程序并收到消息“无法确定位置”,因此[CLLocationManager位置]在我的应用程序中返回nil。然后我在谷歌地图应用程序中按下位置箭头图标,然后谷歌地图应用程序显示我当前的位置。此外,[CLLocationManager位置]在我的应用程序中返回了一些位置。但是,今天同样的问题仍然存在 - [CLLocationManager位置]再次返回nil,所以我猜CLLocationManager会在一段时间后丢弃位置缓存,如果你没有移动设备,那么你就不会得到任何已知的先前位置。任何想法如何解决这个问题,并强制CLLocationManager检索任何位置,如果它是零?
答案 0 :(得分:0)
最近检索到的用户位置。 (只读)
@property(readonly,nonatomic)CLLocation * location
<强>讨论强>
如果从未检索到任何位置数据,则此属性的值为nil。
在iOS 4.0及更高版本中,此属性可能在启动时包含更新的位置对象。具体来说,如果正在运行重要的位置更新并且您的应用程序已终止,则在重新启动应用程序时会使用最新的位置数据更新此属性(并创建新的位置管理器对象)。此位置数据可能比您的应用程序处理的最后一个位置事件更新。
检查存储在此属性中的位置的时间戳始终是一个好主意。如果接收器当前正在收集位置数据,但最小距离过滤器很大,则返回的位置可能相对较旧。如果是,您可以停止接收器并再次启动以强制更新。
它会尽可能长时间地将它存储在缓存中,并且没有超时。如果使用位置服务的东西无法获得任何位置,它可能会将其设置为nil。