8

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

谢谢你的帮助!

4

4 回答 4

17

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

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

于 2010-02-14T21:59:39.670 回答
8
-(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 
    } 
 }
于 2011-04-11T13:53:32.080 回答
0

您可以使用 CLLocationManager 的这个属性:

@property(readonly, NS_NONATOMIC_IPHONEONLY) CLLocation *location;

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

于 2010-02-14T18:50:32.700 回答
0

在这里查看我的答案: 如何删除 cllocation 的缓存? 关于“如何删除 cllocation 缓存”。这应该可以解决您关于 CLLocationManager 缓存的问题。

于 2010-02-14T20:22:57.967 回答