2010-05-31 4 views
6

Actuellement je développe une application d'iPhone où je dois montrer la ville et l'emplacement courants de l'utilisateur pour lequel j'emploie Mapkit Framework. Quand je construis l'application cela fonctionne bien et montre les détails exacts de ville. mais maintenant, quand je tente de construire l'application à nouveau l'application montre message d'erreur dans mon journalMKReverseGeocoder serveur a retourné l'erreur: 503

/SourceCache/ProtocolBuffer_Sim/ProtocolBuffer-26/Runtime/PBRequester.m:523 serveur a retourné une erreur: 503

reverseGeocoder: didFailWithError: Error Domaine = PBRequesterErrorDomain Code = 6001 "L'opération n'a pas pu être terminée. (Erreur PBRequesterErrorDomain 6001.)"

Est-ce qu'un organisme est confronté au même problème et comment puis-je le résoudre?

+0

Je suis confronté à ce problème maintenant. Trouvé un moyen de contourner cela? – Neelesh

Répondre

9

Je suis assez sûr que cela se produit parce que vous êtes en train de tester, et en utilisant trop le géocodeur inverse et les serveurs de Google le savent. Donc, ça vous a bloqué pendant un moment. Réessayez plus tard et voyez si cela fonctionne.

Vous devez vous assurer que vous n'appelez pas le géocodeur plus d'une fois toutes les 60 secondes.

+0

Salut, Nic vous avez raison surtout l'application montre ce message d'erreur jusqu'à 1 PM en Inde et après cela, cela fonctionne bien, je pense que Google peut mettre à jour leur serveur en ce moment. – raaz

+0

Bon, s'il vous plaît marquer cette réponse comme répondue. –

+0

Est-ce sérieusement la raison? J'ai une épingle que l'utilisateur peut faire glisser et elle se met à jour avec la nouvelle adresse ... Si c'est le cas, l'utilisateur ne pourra pas faire glisser l'épingle et la voir mise à jour à moins qu'elle ne soit moins d'une fois toutes les 60 secondes ...! – jowie

0

Cela peut arriver au hasard, selon l'état du serveur.

2

Je trouve!
Eh bien, nous allons maintenant utiliser CLGeocoder, mais si vous voulez encore utiliser MKReverseGeocoder, vous NE DEVEZ PAS appeler [geocoder start] deux fois, même si l'objet de géocodage est nouveau! Par exemple, NE PAS faire:

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

Ou vous obtiendrez un ARROR: le gestionnaire de l'emplacement fonction de la position de mise à jour est appelée dès la détection d'une nouvelle position. Au fur et à mesure que la précision s'améliore, une nouvelle nouvelle positon est envoyée à "didUpdateToLocation".
Mais créer un nouvel objet MKReverseGeocoder chaque fois qu'une position est trouvée est une mauvaise idée! Donc, vous avez quelques solutions:
- Mettez un booléen qui est vrai lorsque geocoder est démarré. Ensuite, dans didFindPlacemark (geocoder's), vous devez arrêter le géocodeur avec [geocoder cancel] et définir votre booléen sur false.
- Rendre la variable du géocodeur non locale et gérer un [geocoder cancel] + realease et en créer un nouveau et [geocoder start] à chaque fois que didUpdateToLocation est appelé.
- Toute autre manière d'éviter que [geocoder start] soit appelé deux fois

J'ai utilisé la première solution et je n'ai plus jamais l'erreur 503.

+0

Malheureusement, cela n'a pas fonctionné pour moi. Même en l'annulant à chaque fois, le MKReverseGeocoder lance un 503 s'il est appelé trop régulièrement. – jowie

2

Pour moi, MKReverseGeocoder échouait avec 503 beaucoup trop de fois. Cela échouerait aussi la première fois qu'on le demanderait, bien après 60 secondes. Par conséquent, j'ai décidé d'abandonner l'utilisation et j'ai plutôt décidé d'accéder directement à l'API de Google en utilisant NSURLRequest via un service que j'ai créé qui analyse également le résultat en tant que chaîne JSON en utilisant le framework SBJSON (très utile).

De mon service, je l'appelle l'URL suivante comme suit:

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

coordinate est un CLLocationCoordinate2D. Je me rends compte que c'est un long chemin autour du problème, mais depuis la conversion à ce système, je n'ai eu aucun problème!

+0

Ceci est une très bonne alternative à 'MKReverseGeocoder'! – venj

Questions connexes