2010-10-13 5 views
10

Je continue à obtenir au hasard quand je cours mon application gps je construis. Cela ne se produit pas à chaque fois, et les coordonnées transmises sont toujours valides (i nslog them). Y a-t-il de la documentation pour eux quelque part?erreur MKErrorDomain 4 iPhone

EDIT:

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(locManager.location.coordinate.latitude, locManager.location.coordinate.longitude); 
geocoder1 = [[MKReverseGeocoder alloc] initWithCoordinate:coord]; 
geocoder1.delegate = self; 
[geocoder1 start]; 

puis environ la moitié du temps, il renvoie une erreur. J'ai essayé de libérer et de réaffecter le géocodeur s'il y avait une erreur, mais cela n'a pas aidé. La seule chose qui a fait était de redémarrer l'application.

+0

Je viens de commencer à recevoir la même erreur récemment. C'est aussi erratique pour moi - parfois, le géocodeur fonctionne bien, parfois il renvoie juste une erreur, tout en transmettant des coordonnées identiques ou très similaires à chaque fois. Peut-être que Google Geocoder a des problèmes? –

+0

Avoir le même problème. Parfois, cela fonctionne dans Maps.app mais pas dans mon application. Ensuite, cela fonctionne à nouveau. Peut-être un problème de chargement sur les serveurs de Google? –

Répondre

3

J'ai souvent frappé cette erreur et j'ai été incapable de comprendre comment l'arrêter; mais j'ai finalement trouvé une issue à toute la question qui marche plutôt bien, et ne prend qu'un peu plus de travail: N'utilise pas du tout le MKReverseGeocoder d'Apple - appelle directement Google's reverse-geocoding API (c'est apparemment le même service que MKReverseGeocoder fait Dans les coulisses). Vous pouvez récupérer JSON ou XML (votre préférence), que vous devrez ensuite analyser, mais ce n'est pas trop difficile.

Par exemple, étant donné que mon application utilise ASIHTTPRequest, c'est ce qu'il ressemble à (bien que ce serait aussi facile à faire avec le faire avec les API natifs d'Apple tels que NSURLConnection):

#pragma mark - 
#pragma mark CLLocationManagerDelegate 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    // Be careful: My code is passing sensor=true, because I got the lat/long 
    // from the iPhone's location services, but if you are passing in a lat/long 
    // that was obtained by some other means, you must pass sensor=false. 
    NSString* urlStr = [NSString stringWithFormat: 
     @"http://maps.googleapis.com/maps/api/geocode/xml?latlng=%f,%f&sensor=true", 
     newLocation.coordinate.latitude, newLocation.coordinate.longitude]; 
    NSURL* url = [NSURL URLWithString:urlStr]; 
    self.reverseGeocoderRequest = [ASIHTTPRequest requestWithURL:url]; 
    self.reverseGeocoderRequest.delegate = self; 
    [self.reverseGeocoderRequest startAsynchronous]; 
} 

Par la voie L'API de Google a des règles, tout comme celle d'Apple. Assurez-vous de lire les documents, en particulier en ce qui concerne les quotas.

11

Dans « MKTypes.h » dans le cadre de MapKit, ce qui suit est défini:

constantes d'erreur pour le cadre du kit de la carte.

enum MKErrorCode { 
    MKErrorUnknown = 1, 
    MKErrorServerFailure, 
    MKErrorLoadingThrottled, 
    MKErrorPlacemarkNotFound, 
}; 

...

MKErrorPlacemarkNotFound

n'a pas pu être trouvé sur le repère spécifié.

Cela semble indiquer que vous faites référence à un repère inconnu dans votre code? Ou il se peut que Google n'ait pas de nom pour le poste que vous passez, quelle que soit la validité des coordonnées.

+0

Ouais je suis tombé sur ces constantes, mais le problème est de savoir comment y remédier, et plus curieusement, pourquoi cela semble se produire au hasard. Est-ce que cela peut prendre différents niveaux de précision à différents moments et avoir plus/moins de décimales? – Marty

+0

Si vous avez posté du code indiquant où vous avez ces erreurs, il sera beaucoup plus facile de vous aider. –

+0

Voir modification ci-dessus. – Marty

0

En fait, je suis également confronté à ce problème. Le code est extrêmement compact

// 1. demander la carte pour les coordonnées actuelles

CLLocationCoordinate2D userLocation;

userLocation.latitude = [[_theMapView.userLocation location] coordonnées] .latitude; userLocation.longitude = [[_theMapView.userLocation location] coordonnée] .longitude;

NSLog (@ "% f,% f", userLocation.latitude, userLocation.longitude);

// 2. inverser les coordonnées du géocodage

MKReverseGeocoder * reverseGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate: emplacement_utilisateur];

[reverseGeocoder setDelegate: self];

[startGeocoder start];

et plus tard simplement NSLog l'erreur dans la méthode déléguée d'échec. Il fonctionne la première fois ou deux, puis cesse de fonctionner

1

Je viens de faire beaucoup de recherches sur ce problème et il semble que ce soit hors de notre portée. J'ai vérifié les forums des développeurs ainsi que tout autour de Stack et ailleurs et personne n'a de solution autre que d'utiliser un service différent. Il y a un très bon fil à https://devforums.apple.com/message/154126 sur le sujet.

Certaines personnes trouvent l'erreur après un certain temps, je la trouve juste pour un moment, puis revient. J'ai regardé l'exemple de code "Adresse actuelle" et je ne pouvais pas voir comment je pourrais avoir foiré.J'ai couru l'exemple de code et bien sûr, c'était des erreurs NSLogging au lieu de retourner un emplacement.

Ce lien a un code en utilisant géocodage inverse de Google: http://www.iphonedevsdk.com/forum/iphone-sdk-development/31883-pbrequestererrordomain-errors-reverse-geocoding.html#post155793

2

Je suis en cours d'exécution dans la même chose (exactement le même code échoue au hasard parfois) et je pense que je l'ai trouvé la réponse. De Apple's developer docs: "Chaque application Map Kit a une capacité de géocodage inverse limitée, il est donc avantageux d'utiliser les requêtes de géocodage inverse avec parcimonie." Donc, ma théorie est, nous obtenons la vitesse limitée ... puisque aucune autre variable ne change (c.-à-d. Mon code ne change pas, je l'exécute sur le simulateur donc l'emplacement de l'appareil n'est pas Je pense que cela doit être la seule raison qui reste.

4

J'ai rencontré et résolu ce problème récemment. Dans mon cas, lorsque Apple Map ne trouve aucun résultat pour une requête, il lui arrive parfois de lancer cette erreur "MKErrorDomain = 4". Donc j'ai fini par traiter cela comme "résultat non trouvé".

Il était fastidieux de le savoir, MapKit a besoin d'un meilleur système de gestion des erreurs.