Ниже приведены некоторые фрагменты моего кодаCLLocationManager stopUpdatingLocation не останавливает
BOOL checkingForLocation;
.
.
.
- (IBAction)LocationButtonTapped:(id)sender {
[locationManager startUpdatingLocation];
checkingForLocation = YES;
}
.
.
.
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
[locationManager stopUpdatingLocation];
// locationManager = nil;
if (checkingForLocation) {
checkingForLocation = NO;
NSLog(@"here");
// fetch data from server using location and present view controllers
}
}
didUpdateLocations вызывается несколько раз, потому что locationManager постоянно обновляет местоположение каждого startUpdatingLocation. У моего приложения есть ошибка, где код в пределах if(checkingForLocation)
работает несколько раз и отображает представление несколько раз, вызывая нежелательные результаты.
1) Почему это останавливаетUpdatingLocation не останавливает дальнейшие вызовы didUpdateLocations?
2) Кроме того, если checkingForLocation
уже установлен NO
почему последующие вызовы didUpdateLocations все еще относятся к checkingForLocation
как YES
. Там есть соревнование?
С помощью поиска других вопросов SO я обнаружил, что настройка locationManager = nil
остановит дополнительные вызовы на didUpdateLocations, которые он исправляет проблему в моем случае, но никаких реальных объяснений. Кажется, что stopUpdatingLocation должен позаботиться об этом. Любое понимание очень ценится.
Спасибо,
Где вы называете '[locationManager startUpdatingLocation]; checkForLocation = YES; '? – OgreSwamp
@OgreSwamp Я вызываю его при нажатии кнопки. Для ясности я добавил метод IBAction. – galenom