2011-06-05 38 views
2

在我的头,我把CLLocationManager是给老位置

CLLocationManager *locationManager; 
@property (nonatomic, retain) CLLocationManager *locationManager; 

在我的实现文件:

- (void)viewDidLoad 
{ 
    self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
    self.locationManager.distanceFilter = 50.0f; 
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters]; 
    self.locationManager.delegate = self; 
    [locationManager startUpdatingLocation]; 
    [super viewDidLoad]; 
} 
的委托方法

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
     NSLog(@"Location: %g,%g", newLocation.coordinate.latitude, newLocation.coordinate.longitude); 

} 

现在我不断收到老

然后经度和纬度值

用Google搜索的解决方案我无法找到任何,我不明白我在做什么错,

任何帮助,请

+0

这是在设备上还是模拟器? – 2011-06-05 18:58:50

回答

4

您可以使用位置的timestamp,以过滤太旧位置更新:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    if ([newLocation.timestamp timeIntervalSinceNow] < -60) return; // location is not fresh 
    ... 
} 
+0

但是,这样做还是在同一个循环中。 – ialameh 2011-06-05 17:56:17

+0

没有'distanceFilter'工作吗? – albertamg 2011-06-05 18:09:28

+0

我试图评论distanceFilter,但仍然相同 – ialameh 2011-06-05 18:20:22

2

从我的经验,位置管理器将只接收一个位置更新当手机移动(大概是为了延长电池寿命)。换句话说,如果电话在20分钟前在某个位置接收到位置更新,并且电话尚未移动,则当您启动位置服务时,它会将该旧值作为“可接受”值返回给newLocation对象。

这就是为什么albertamg的建议被普遍应用的原因,但缺点是通过过滤掉这些“旧”更新,您可能会遇到无法检测到静止手机中的任何内容的风险。

希望这有助于=)

相关问题