У меня есть менеджер CoreLocation в VC, когда пользователь нажимает кнопку «получить направление», я инициализирую диспетчер местоположения, и приложение открывает направление карты Google с текущим местоположением и некоторым предварительно определенным местоположением пункта назначения.
Вот моя проблема: если приложение не находится в фоновом режиме, текущее местоположение почти всегда верно, но если приложение вызывается из фона в том же VC, и пользователь снова нажимает кнопку «получить направление», текущее местоположение обычно показывает старые местоположения. Короче говоря, меня беспокоит многозадачность, а отметка времени извлеченных местоположений не решила мою проблему.
IBAдействие:
if ( self.locationManager ) {
[_locationManager release];
self.locationManager = nil;
}
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationTimer = [NSTimer scheduledTimerWithTimeInterval:LOCATION_TIMER target:self selector:@selector(stopUpdatingLocationTimer) userInfo:nil repeats:NO];
HUD = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
[self.locationManager startUpdatingLocation];
Делегат основного местоположения:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
NSLog(@"%f",locationAge);
if (locationAge > 3.0)
return;
if (newLocation.horizontalAccuracy < 0)
return;
if ( self.currentLocation == nil || self.currentLocation.horizontalAccuracy > newLocation.horizontalAccuracy ) {
self.currentLocation = newLocation;
if (self.currentLocation.horizontalAccuracy <= self.locationManager.desiredAccuracy) {
[self stopUpdatingLocations:YES];
}
}
}