Я узнаю!
Что ж, теперь нам придется использовать CLGeocoder, но если вы все еще хотите использовать MKReverseGeocoder, вы НЕ ДОЛЖНЫ вызывать [geocoder start] дважды, даже если объект геокодирования является новым новым!
Например, НЕ делайте этого:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
MKReverseGeocoder *geoCoder = [[[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate] autorelease];
geoCoder.delegate = self;
[geoCoder start];
}
Или вы получите сообщение об ошибке: функция определения местоположения менеджера местоположения вызывается, как только обнаруживается новая позиция. По мере того, как точность становится все лучше и лучше, новая «новая позиция» отправляется в «didUpdateToLocation».
Но создавать новый объект MKReverseGeocoder при каждом обнаружении позиции - плохая идея!
Итак, у вас есть несколько решений:
- Поставьте логическое значение, которое верно при запуске геокодера. Затем в didFindPlacemark (геокодер) вы должны остановить геокодер с помощью [отмена геокодера] и установить логическое значение false.
- Сделайте геокодерную переменную не локальной и управляйте [отменой геокодера] + realease и создавайте новую и [запуск геокодера] каждый раз, когда вызывается didUpdateToLocation.
- Любой другой способ избежать двойного вызова [геокодера]
Я использовал первое решение и больше не получаю ошибку 503.