Ответ 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
) полученного местоположения, прежде чем пытаться геокодировать его.