MKReverseGeocoder сервер вернул ошибку: 503 - PullRequest
6 голосов
/ 31 мая 2010

В настоящее время я разрабатываю приложение для iPhone, в котором мне нужно показать текущий город и местоположение пользователя, для которого я использую Mapkit Framework. Когда я создаю приложение, оно работает нормально и отображает точные детали города. Но сейчас, когда я пытаюсь чтобы собрать приложение снова приложение показывает следующее сообщение об ошибке в моем журнале

/ SourceCache / ProtocolBuffer_Sim / ProtocolBuffer-26 / Runtime / PBRequester.m: 523 сервер вернул ошибку: 503

reverseGeocoder: didFailWithError: Error Domain = PBRequesterErrorDomain Code = 6001 "Операция не может быть завершена. (PBRequesterErrorDomain ошибка 6001.)"

Есть ли у какого-либо органа такая же проблема и как я могу ее решить?

Ответы [ 4 ]

9 голосов
/ 31 мая 2010

Я почти уверен, что это происходит, потому что вы проходите тестирование и слишком часто используете обратный геокодер, и серверы Google это знают. Таким образом, это в основном заблокировало вас на некоторое время. Попробуйте позже и посмотрите, работает ли он.

Вам необходимо убедиться, что вы не вызываете геокодер чаще, чем раз в 60 секунд.

2 голосов
/ 20 января 2012

Для меня MKReverseGeocoder слишком много раз терпел неудачу с 503. Он также потерпит неудачу при первом запросе, через 60 секунд. В результате я решил отказаться от его использования и вместо этого решил обратиться к API Google напрямую, используя NSURLRequest через созданную мной службу, которая также анализирует результат как строку JSON с использованием SBJSON Framework (очень полезно).

Из моей службы я вызываю следующий URL-адрес следующим образом:

NSString *urlStr = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=true", coordinate.latitude, coordinate.longitude];

, где coordinate - это CLLocationCoordinate2D.

Я понимаю, что это долгий путь к проблеме, но после перехода на эту систему у меня не было проблем!

2 голосов
/ 15 декабря 2011

Я узнаю!
Что ж, теперь нам придется использовать 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.

0 голосов
/ 14 сентября 2011

Это может произойти в случайном порядке, в зависимости от состояния сервера.

...