2010-05-31 13 views
6

Derzeit entwickle ich eine iPhone-Anwendung, wo ich die aktuelle Stadt und Ort des Benutzers zeigen muss, für die ich Mapkit Framework verwende.Wenn ich die Anwendung erstellen, funktioniert es gut und zeigen Sie mir die genaue Stadt Details. aber jetzt, wenn ich versuche, die Anwendung zu erstellen wieder Anwendung zeigt folgende Fehlermeldung im LogMKReverseGeocoder-Server zurückgegeben Fehler: 503

/SourceCache/ProtocolBuffer_Sim/ProtocolBuffer-26/Runtime/PBRequester.m:523 Server zurückgegeben Fehler: 503

reverseGeocoder: didFailWithError: Fehlerdomäne = PBRequesterErrorDomain Code = 6001 "Vorgang konnte nicht abgeschlossen werden. (PBRequesterErrorDomain Fehler 6001.)"

Ist ein Körper mit dem gleichen Problem konfrontiert und wie kann ich es lösen?

+0

Ich bin jetzt mit diesem Problem konfrontiert. Einen Weg gefunden, um es zu umgehen? – Neelesh

Antwort

9

Ich bin ziemlich sicher, dass dies passiert, weil Sie testen, und verwenden Sie den Reverse-Geocoder zu viel und Googles Server wissen, dass. Also hat es dich für eine Weile blockiert. Versuchen Sie es später noch einmal und sehen Sie, ob es funktioniert.

Sie müssen sicherstellen, dass Sie den Geocoder nicht öfter als einmal alle 60 Sekunden aufrufen.

+0

Hallo, Nic Sie haben Recht meistens zeigt die Anwendung diese Fehlermeldung bis 13 Uhr in Indien und danach funktioniert es gut, ich denke, Google kann ihren Server zu dieser Zeit aktualisieren. – raaz

+0

Gut, bitte markieren Sie diese Antwort als beantwortet. –

+0

Ist das ernsthaft der Grund? Ich habe eine Nadel, die der Benutzer herumziehen kann und es mit der neuen Adresse aktualisiert ... Wenn dies der Fall ist, wird der Benutzer nicht in der Lage sein, den Stift herumzuziehen und es zu aktualisieren, es sei denn es ist weniger als einmal alle 60 Sekunden ...! – jowie

0

Es kann zufällig geschehen, abhängig vom Status des Servers.

2

Ich finde es heraus!
Nun, jetzt müssen wir CLGeocoder verwenden, aber wenn Sie MKReverseGeocoder verwenden möchten, MÜSSEN Sie [Geocoderstart] nicht zweimal aufrufen, auch wenn das Geocode-Objekt ein neues ist! Zum Beispiel, dies nicht tun:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
     MKReverseGeocoder *geoCoder = [[[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate] autorelease]; 
     geoCoder.delegate = self; 
     [geoCoder start]; 
} 

Oder Sie erhalten eine arror erhalten: Die Lage Manager Update Position Funktion aufgerufen wird, sobald eine neue Position erfaßt wird. Da die Genauigkeit immer besser wird, wird eine neue, neue Nachricht an "didUpdateToLocation" gesendet.
Erstellen eines neuen Objekts MKReverseGeocoder jedes Mal, wenn eine Position gefunden wird, ist eine schlechte Idee! Also, Sie haben ein paar Lösungen:
- Setzen Sie einen booleschen Wert, der wahr ist, wenn Geocoder gestartet wird. Dann sollten Sie in didFindPlacemark (Geocoder) den Geocodierer mit [Geocoder löschen] stoppen und Ihren Booleschen Wert auf false setzen.
- Machen Sie Geocoder-Variable nicht lokal und verwalten Sie [Geocoder löschen] + release und erstellen Sie ein neues und [Geocoder-Start] jedes Mal, wenn didUpdateToLocation aufgerufen wird.
- Jede andere Möglichkeit zu vermeiden, dass [Geocoder-Start] zweimal aufgerufen wird.
Ich habe die erste Lösung verwendet und bekomme den Fehler 503 nicht mehr.

+0

Leider hat nicht funktioniert für mich. Selbst wenn es jedes Mal abgebrochen wird, löst der MKReverseGeocoder eine 503 aus, wenn es zu regelmäßig aufgerufen wird. – jowie

2

Für mich war MKReverseGeocoder bei 503 viel zu oft versagt. Es würde auch fehlschlagen, wenn es das erste Mal angefordert wurde, nachdem 60 Sekunden vergangen waren. Als Ergebnis entschied ich mich, es nicht mehr zu verwenden, sondern entschied mich dafür, direkt mit NSURLRequest über einen von mir erstellten Dienst auf Googles API zuzugreifen, der das Ergebnis auch als JSON String unter Verwendung des SBJSON Frameworks analysierte (sehr nützlich).

Von meinem Service, nenne ich die folgende URL wie folgt:

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

wo coordinate ein CLLocationCoordinate2D ist.

Ich weiß, das ist ein langer Weg um das Problem, aber seit der Umstellung auf dieses System hatte ich keine Probleme!

+0

Dies ist eine wirklich gute Alternative zu 'MKReverseGeocoder'! – venj

Verwandte Themen