函数“didUpdateToLocation”被调用而没有改变

我这样初始化locationManager:

if (!self.locManager) { self.locManager = [[CLLocationManager alloc] init]; self.locManager.delegate = self; [locManager startMonitoringSignificantLocationChanges]; } 

我的设备不动,仍然每次都调用“didUpdateToLocation”。 什么可能是一个问题? 谢谢

didUpdateToLocation可能由于多种原因而更新,处理这个问题的好策略是逐步过滤基于时间戳的结果,然后要求准确性。

苹果在LocateMe示例应用程序中提供了一个很好的例子:

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { // test the age of the location measurement to determine if the measurement is cached // in most cases you will not want to rely on cached measurements NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow]; if (locationAge > 5.0) return; // test that the horizontal accuracy does not indicate an invalid measurement if (newLocation.horizontalAccuracy < 0) return; // test the measurement to see if it is more accurate than the previous measurement if (self.bestEffortAtLocation == nil || self.bestEffortAtLocation.horizontalAccuracy > newLocation.horizontalAccuracy) { // store the location as the "best effort" self.bestEffortAtLocation = newLocation; // test the measurement to see if it meets the desired accuracy // // IMPORTANT!!! kCLLocationAccuracyBest should not be used for comparison with location coordinate or altitidue // accuracy because it is a negative value. Instead, compare against some predetermined "real" measure of // acceptable accuracy, or depend on the timeout to stop updating. This sample depends on the timeout. // if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) { // we have a measurement that meets our requirements, so we can stop updating the location // // IMPORTANT!!! Minimize power usage by stopping the location manager as soon as possible. // [self stopUpdatingLocation:NSLocalizedString(@"Acquired Location", @"Acquired Location")]; } } } 

你检查位置的差异? 当其他属性如精度,航向或速度发生变化时,CoreLocation也会调用callback函数

startMonitoringSignificantLocationChanges应该给你一个初步的修复,之后你会得到“重大变化”(单元塔变化等)的callback。