停止返回缓存的CLLocationManager位置

时间:2010-02-14 18:13:22

标签: iphone cocoa-touch location cllocationmanager caching

我想知道是否有某种方法可以使它成为CLLocationManager不会自动返回缓存位置。据我所知,文档说“位置服务尽可能快地返回初始位置,在可用时返回缓存信息”,但这个缓存位置可能离用户当前位置非常远,如果可能,我希望它更精确。 / p>

感谢您的帮助!

4 个答案:

答案 0 :(得分:13)

您无法阻止缓存,但过滤缓存数据并不困难。核心位置包括其位置的时间戳。将位置的时间戳与应用程序启动时保存的时间戳进行比较,您将能够分辨哪些位置是旧的(缓存,在应用程序声明之前找到)以及哪些是新的。扔掉旧的。

位置时间戳是一个NSDate,因此只需在应用启动时获取[NSDate date]的值,并在过滤位置时将其用作参考点。一旦开始获取新数据,您甚至可以丢弃参考值,并将零参考日期视为暗示应该信任新位置。

答案 1 :(得分:6)

-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
{
    if ([newLocation.timestamp timeIntervalSinceNow] > -10.0) // The value is not older than 10 sec. 
    { 
         // do something 
    } 
 }

答案 2 :(得分:0)

您可以使用CLLocationManager的此属性:

@property(readonly, NS_NONATOMIC_IPHONEONLY) CLLocation *location;

如果从未检索到任何位置数据,则此属性的值为nil,否则,这是CoreLocation缓存其数据的位置。因此,如果您始终想从头开始,只需检查此属性是否为nil。如果它是nil,那么你没事;否则,您需要停止您的位置管理器并再次启动它:这将强制更新,这将导致缓存的值被刚刚触发的新位置覆盖。

答案 3 :(得分:0)

请在此处查看我的回答: How to remove cache of cllocation?  关于“如何删除cllocation的缓存”。 这应该可以解决有关CLLocationManager缓存的问题。

相关问题