2010-10-13 17 views
10

Sigo recibiendo esto al azar cuando ejecuto mi aplicación gps que estoy construyendo. No ocurre siempre, y las coordenadas transferidas son siempre válidas (i nslogarlas). ¿Hay documentación para estos en alguna parte?MKErrorDomain error 4 iPhone

EDIT:

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

y luego alrededor de la mitad del tiempo que devuelve un error. Traté de liberar y volver a asignar el geocodificador si había un error, pero eso no ayudó. Lo único que hizo fue reiniciar la aplicación.

+0

Acabo de recibir el mismo error recientemente. También es errático para mí: a veces el geocodificador funciona bien, a veces solo devuelve un error, mientras pasa las mismas o muy similares coordenadas cada vez. ¿Tal vez Google Geocoder está teniendo algunos problemas? –

+0

Tiene el mismo problema. Algunas veces funciona en Maps.app pero no en mi aplicación. Entonces funciona de nuevo. Tal vez un problema de carga en los servidores de Google? –

Respuesta

3

He estado pulsando este error repetidamente, y no he podido averiguar cómo detenerlo; pero finalmente encontré un final de todo el problema que funciona bastante bien, y solo me toma un poco más de trabajo: no use el MKReverseGeocoder de Apple en absoluto; en su lugar, llame directamente al Google's reverse-geocoding API (este es aparentemente el mismo servicio que MKReverseGeocoder) entre bastidores). Puede recuperar JSON o XML (su preferencia), que luego tendrá que analizar, pero eso no es demasiado difícil.

Por ejemplo, desde mi aplicación está utilizando ASIHTTPRequest, esto es lo que parece (aunque esto también sería fácil de hacer con ver con las API de Apple nativas como 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]; 
} 

Por cierto , La API de Google tiene reglas, al igual que la de Apple. Asegúrese de leer los documentos, especialmente con respecto a las cuotas.

11

En "MKTypes.h" en el marco MapKit, se define lo siguiente:

constantes de error para el marco Mapa kit.

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

...

MKErrorPlacemarkNotFound

La marca de posición especificado no se pudo encontrar.

¿Parece que está haciendo referencia a una marca de posición desconocida en su código? O podría ser que Google no tenga un nombre para la posición que está pasando, sin importar cuán válidas sean las coordenadas.

+0

Sí, me encontré con esas constantes, pero el problema es cómo solucionarlo, y más curiosamente, por qué parece suceder al azar. ¿Está obteniendo diferentes niveles de precisión en diferentes momentos y teniendo más/menos decimales? – Marty

+0

Si publicó un código que muestra dónde obtiene estos errores, será mucho más fácil ayudarle. –

+0

Véase la edición anterior. – Marty

0

En realidad, me encuentro con este problema también. El código es extremadamente compacto

// 1. preguntar mapa para coords actuales

CLLocationCoordinate2D userLocation;

userLocation.latitude = [[_theMapView.userLocation location] coordinate] .latitude; userLocation.longitude = [[_theMapView.ubicación de ubicación de usuario] coordinate] .longitude;

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

// 2. Coordenadas geocodificadas inversas

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

[reverseGeocoder setDelegate: self];

[reverseGeocoder start];

y posterior simplemente NSLog el error en el método de delegado fallido. Funciona la primera vez o dos, luego deja de funcionar

1

Acabo de terminar con una gran cantidad de investigaciones sobre este problema y parece estar fuera de nuestras manos. Revisé los foros de desarrolladores, así como todo lo relacionado con Stack y otros lugares, y nadie tiene otra solución que no sea utilizar un servicio diferente. Hay un hilo bastante bueno en https://devforums.apple.com/message/154126 sobre el tema.

Algunas personas encuentran el error después de cierto tiempo, lo encuentro fuera por un tiempo y luego regresa. Miré el código de muestra de "Dirección actual" y no pude ver cómo podría haber estropeado.Ejecuté el código de muestra y, efectivamente, fueron errores de NSLogging en lugar de devolver una ubicación.

Este enlace tiene algo de código usando geocodificador inversa de Google: http://www.iphonedevsdk.com/forum/iphone-sdk-development/31883-pbrequestererrordomain-errors-reverse-geocoding.html#post155793

2

estoy corriendo en el mismo (el mismo código exacto falla aleatoriamente a veces) y creo que he encontrado la respuesta. De Apple's developer docs: "Cada aplicación de Map Kit tiene una cantidad limitada de capacidad de geocodificación inversa, por lo que le conviene usar las solicitudes de geocodificación inversa con moderación".

Así que mi teoría es que nos están limitando las tasas ... ya que no cambian otras variables (es decir, mi código no está cambiando, lo estoy ejecutando en el simulador por lo que la ubicación del dispositivo no es t cambiar, etc.) Creo que esta debe ser la única razón que queda.

4

Me he encontrado y he resuelto este problema recientemente. En mi caso, cuando Apple Map no puede encontrar ningún resultado para una consulta, a veces arrojará este error "MKErrorDomain = 4". Así que terminé simplemente tratar esto como "resultado no encontrado".

Fue un esfuerzo encontrar esto, MapKit necesita un mejor sistema de manejo de errores.

Cuestiones relacionadas