在我的标题中,我把
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 );
}
现在我不断获得纬度和经度的旧值
用谷歌搜索我找不到的解决方案,我不明白我做错了什么,请帮助
答案 0 :(得分:4)
您可以使用该位置的timestamp来过滤过旧的位置更新:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
if ([newLocation.timestamp timeIntervalSinceNow] < -60) return; // location is not fresh
...
}
答案 1 :(得分:2)
根据我的经验,位置管理员只会在手机移动时收到位置更新 (可能是为了延长电池寿命)。
换句话说,如果手机在20分钟前在某个位置收到位置更新,并且手机未移动,则当您启动位置服务时,它会将该旧值作为“可接受”值返回newLocation对象。
这就是为什么albertamg的建议被普遍应用的原因,尽管缺点是通过过滤掉这些“旧的”更新,你冒着不能从静止的手机中检测到任何东西的风险。
希望这有助于=)