如何清除cllocation的缓存?

6

我正在开发一款iPhone应用程序,它是一个位置感知应用程序。 目前该应用程序除了缓存之前的位置外,其他工作都正常。 第一次启动应用程序时,位置管理器会获取当前位置,然后根据当前位置显示附近的事物。

但是从下一次开始,它将使用先前获取的位置,并且直到我重新启动手机之前,它都会获取相同的位置。所以到这一点上,我已经清楚了位置管理器缓存了位置。

所以我的问题是如何删除此缓存并强制位置管理器获取新位置。谢谢。

1个回答

9

实际上,我认为你无法这样做:这取决于你(在你的CLLocationManagerDelegate实例中)根据时间戳过滤接收到的位置(以确保你处理的位置是最新的,而不是缓存的位置)。

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ NSDate *eventDate = newLocation.timestamp; NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; //这个事件是否足够新鲜和准确? if (abs(howRecent) < SECS_OLD_MAX) { //开始处理它! } .... ....

我只是在向您询问建议,SEC_OLD_MAX 应该设置为多少? - harshalb
如果时间间隔大于 secs 旧的最大值怎么办? - harshalb
1
通常与当前位置的时间差远低于一秒钟。如果与现在的时间差大于一秒钟,则可能是缓存的位置。 - Felix Lamouroux
谢谢Felix。最后一个问题,如果我得到了缓存数据,如何忽略它并获取新的数据?我需要停止并重新启动位置管理器吗? - harshalb
2
如果位置不够新,就什么也不做,等待下一个位置。只要您没有调用CLLocationManager上的stopUpdatingLocation(或者如果您的委托收到“失败”事件),您将继续获得新位置。 - yonel
当用户更改其设备的日期和时间时,此解决方案无法正常工作。 - Yogendra Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接