2010-05-31 2 views
6

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

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

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

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

+0

Я столкнулся с этой проблемой сейчас. Нашел способ обойти это? – Neelesh

ответ

9

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

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

+0

Привет, Ник, вы правы, в основном приложение показывает это сообщение об ошибке до 1 часа дня в Индии, и после этого он отлично работает, я думаю, Google может обновить свой сервер в это время. – raaz

+0

Хорошо, пожалуйста, отметьте этот ответ как ответ. –

+0

Это всерьез причина? У меня есть контакт, который пользователь может перетащить, и он обновляется с новым адресом ... Если это так, пользователь не сможет перетащить булавку вокруг и увидеть ее обновлением, если она меньше одного раза каждые 60 секунд ...! – jowie

0

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

2

Я узнаю!
Ну, теперь нам нужно будет использовать 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]; 
} 

Или вы получите arror: функция позиции обновления менеджер местоположения вызывается сразу после того, как обнаруживается новое положение. По мере того как точность становится все лучше и лучше, новое новое новое положение отправляется на «didUpdateToLocation».
Но создание нового объекта MKReverseGeocoder каждый раз, когда позиция найдена, является плохой идеей! Итак, у вас есть несколько решений:
- Поместите логическое значение, которое истинно при запуске геокодера. Затем в файле didFindPlacemark (геокодер) вы должны остановить геокодер с [отклонением геокодера] и установить для вашего логического значения значение false.
- Сделать переменную геокодера не локальной и настроить [геокодер отменить] + повторно создать и создать новый, а [запуск геокодера] каждый раз, когда будет вызыватьсяOpdateToLocation.
- Любой другой способ избежать [запуска геокодера] для вызова дважды

Я использовал первое решение и никогда не получаю ошибку 503.

+0

К сожалению, для меня это не сработало. Даже отменяя его каждый раз, MKReverseGeocoder выбрасывает 503, если он называется слишком регулярно. – jowie

2

Для меня 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.

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

+0

Это действительно хорошая альтернатива 'MKReverseGeocoder'! – venj

Смежные вопросы