当前位置错误在Xcode 4.5

在Xcode 4.5中苹果引入了苹果新的地图。 我的申请比较重要,需要地图服务。 而且我注意到,在我的应用程序中,它显示错误的当前位置,直到您删除应用程序并重新打开它显示正确的当前位置(有时它不)。 只是提及我连接到4G时,显示错误的当前位置。 有没有办法来解决这个错误,因为我的应用程序非常需要正确的位置。 提前致谢。 如果你可以提供代码,这将有助于很多… 编辑:苹果地图应用程序中的同一问题

我的代码:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { { } if (!oldLocation) totalDistance = 0.0; else totalDistance += [newLocation distanceFromLocation:oldLocation]; } 

从苹果文档的旧方法似乎仍然在iOS6(在我的活动应用程序(它跟踪通过GPS跟踪用户的路线)没有注意到)

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow]; if (locationAge > 5.0) return; if (newLocation.horizontalAccuracy < 0) return; // proceed with coords here } 

从讨论更新 :计算总和当前的距离可以这样做(不包括一些小的东西):

 // somewhere at the top CLLocation* lastUsedLocation = nil; // last location used in calculation CLLocation* pointA = nil; // start of the track double totalDistance = 0; // total distance of track double currentDistance = 0; // distance between startTrack point and current location ... // when you start updating location: - (void) startTracking { lastUsedLocation = nil; pointA = nil; totalDistance = 0; currentDistance = 0; [locationManager startUpdatingLocation]; } ... // location update callback - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow]; if (locationAge > 5.0) return; // filter cached if (newLocation.horizontalAccuracy < 0) return; // filter invalid if(!pointA) pointA = [newLocation retain]; if(lastUsedLocation) { totalDistance += [newLocation distanceFromLocation:lastUsedLocation]; } currentDistance = [pointA distanceFromLocation:newLocation]; [lastUsedLocation release]; lastUsedLocation = [newLocation retain]; } 

如果您需要selectclosures背景位置,请手动禁用它,如下所示:

 - (void)applicationDidEnterBackground:(UIApplication *)application { if(backgroundLocationDisabled) { [locationManager stopUpdatingLocation]; // additional stuff } } 

我注意到与Xcode 4.4 +相同的问题。 这个问题只会在Xcode中出现(随机,或者它似乎是这样):如果您将应用程序上传到App Store,这不再是一个问题。 同时,请提交一个错误。

你应该检查时间戳..如果我正确地理解你的应用逻辑,你可以做一些像 –

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSDate* time = newLocation.timestamp; NSTimeInterval timePeriod = [time timeIntervalSinceNow]; if(timePeriod < SOME_MINIMUM_TIME_PERIOD ) { //for eg: timePeriod < 1.0 totalDistance += [newLocation distanceFromLocation:oldLocation]; } else { // skip.. or do what you do on a 'location-not-updated' event } }