Подтвердить что ты не робот

CLGeocoder reverseGeocodeLocation возвращает 'kCLErrorDomain error 9'

Я разрабатываю приложение iOS с функциями обратной геокодирования в соответствии с этой статьей: учебник по геокодированию

Но когда я тестирую подобное на симуляторе, я получаю "kCLErrorDomain error 9". Я много искал, и есть только ошибка 0 или 1 не 9.

Вот мой код в viewDidLoad:

self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.delegate = self;
self.locationManager.distanceFilter = 80.0;
[self.locationManager startUpdatingLocation];

CLGeocoder *geocoder = [[[CLGeocoder alloc] init] autorelease];
[geocoder reverseGeocodeLocation:self.locationManager.location 
   completionHandler:^(NSArray *placemarks, NSError *error) {
       NSLog(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");

       if (error){
           NSLog(@"Geocode failed with error: %@", error);            
           return;

       }

       if(placemarks && placemarks.count > 0)

       {
           //do something   
           CLPlacemark *topResult = [placemarks objectAtIndex:0];
           NSString *addressTxt = [NSString stringWithFormat:@"%@ %@,%@ %@", 
                                   [topResult subThoroughfare],[topResult thoroughfare],
                                   [topResult locality], [topResult administrativeArea]];
           NSLog(@"%@",addressTxt);
       }
   }];

Большое спасибо.

4b9b3361

Ответ 1

Коды ошибок Core Location описаны здесь.

Значения 8, 9 и 10 кода:

kCLErrorGeocodeFoundNoResult,
kCLErrorGeocodeFoundPartialResult,
kCLErrorGeocodeCanceled

На основе показанного кода наиболее вероятная причина, по которой вы получите ошибку 8, заключается в том, что она пытается использовать location сразу после вызова startUpdatingLocation, в это время она может быть nil.

Обычно для получения текущего местоположения требуется несколько секунд, и он скорее всего будет nil до тех пор (в результате получается ошибка геокода 8 или kCLErrorGeocodeFoundNoResult). Я не уверен, что код ошибки 9 означает "FoundPartialResult", но пример приложения Apple GeocoderDemo обрабатывается одинаково (как "Нет результата" ).

Попробуйте переместить код геокодирования (весь код после вызова startUpdatingLocation) методу делегата locationManager:didUpdateToLocation:fromLocation:. Менеджер местоположения вызовет этот метод делегата, когда он действительно имеет место, и только тогда безопасно использовать location.

Там, после успешного завершения геокодирования (или нет), вы можете вызвать stopUpdatingLocation, иначе он будет пытаться геокодировать каждый раз, когда будет обновлено местоположение пользователя.

Вы также можете проверить точность (newLocation.horizontalAccuracy) и возраст (newLocation.timestamp) полученного местоположения, прежде чем пытаться геокодировать его.

Ответ 2

Оказывается, я смешал длину и широту при создании местоположения. Думал, я бы добавил это как что-то для людей, чтобы проверить.