Ограничить обратную геолокацию – kCLErrorDomain Code = 2

В настоящее время я пытаюсь написать приложение iOS, которое регистрирует состояния, которые посетил пользователь.

Проблема, с которой я сталкиваюсь, заключается в том, что мой (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations метод (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations вызывается снова и снова. Я не обязательно рассматриваю это как проблему, кроме этого метода, я вызываю другой метод, который обращает геокоды объект CLLocation и дает имя состояния.

Ошибка, которую я получаю:

 Geocode failed with error: Error Domain=kCLErrorDomain Code=2 "The operation couldn't be completed. (kCLErrorDomain error 2.)" 

Я понимаю, что я достиг предела в reverseGeoCoding за определенный timelimit, я просто не уверен, как его ограничить.

Вот мой код:

 CLLocation *currentLocation; - (void) getLocation { CLGeocoder *geocoder = [[CLGeocoder alloc] init]; [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { if (error){ NSLog(@"Geocode failed with error: %@", error); return; } if(placemarks && placemarks.count > 0) { CLPlacemark *placemark= [placemarks objectAtIndex:0]; currentState = [NSString stringWithFormat:@"%@",[placemark administrativeArea]]; } //Checks to see if the state exists in the textFile, if not it writes it to the file if(![newState checkIfStateExists:currentState]) { [newState writeToFile:currentState]; } }]; } -(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { //just a thought, didn't work //if(![[locations lastObject] isEqual:currentLocation]) currentLocation = [locations lastObject]; [self getLocation]; } -(void) initializeGPS { self.locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; locationManager.distanceFilter = kCLDistanceFilterNone; [locationManager startUpdatingLocation]; } - (void) viewDidLoad { [self initializeGPS]; [super viewDidLoad]; } 

Этот код отлично работает в том, что он получает местоположение в координатах GPS, переводит его в имя состояния и записывает это имя состояния в файл.

Его просто называют слишком много раз, и я не уверен, как ограничить количество раз, когда (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations .

Используйте свойство distanceFilter для CLLocationManager, как описано здесь: https://developer.apple.com/library/mac/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

свойство distanceFilter позволяет установить расстояние в метрах, которое устройство должно перемещать, прежде чем обновление будет обновлено.

Надеюсь это поможет!

  • Получение неправильных корней при отслеживании через пакет данных сотовой связи
  • Отслеживайте позицию пользователя в течение более длительного периода времени
  • Могу ли я получить точность определения местоположения GPS в iOS?
  • Как применить фильтр на CMRotationMatrix с помощью CADisplayLink
  • Точность определения местоположения - iOS
  • ios Location Фоновый режим: обновление местоположения до 18 минут
  • iPhone 4 рассчитает Day Duration программно с широты GPS и дня года
  • Как сохранить приложение GPS в фоновом режиме без пауз
  • Обнаружение Wi-Fi включен (независимо от того, подключен ли он)
  • Возможно ли получить местоположение пользователя, когда отключены как сотовые данные, так и Wi-Fi?
  • Чтение данных GPS с изображения, возвращаемого камерой в iOS iphone
  • Давайте будем гением компьютера.