2012-03-02 10 views
12

Estoy desarrollando una aplicación para iOS con geocodificación inversa características de acuerdo con este artículo: geocoding tutorialCLGeocoder reverseGeocodeLocation devuelve 'kCLErrorDomain error 9'

Pero cuando prueba como esta en el simulador, me sale 'error kCLErrorDomain 9'. He buscado mucho y sólo hay error 0 ó 1 no 9.

Aquí está mi código en viewDidLoad:

self.locationManager = [[CLLocationManager alloc]init]; 
self.locationManager.delegate = self; 
self.locationManager.distanceFilter = 80.0; 
[self.locationManager startUpdatingLocation]; 

CLGeocoder *geocoder = [[[CLGeocoder alloc] init] autorelease]; 
[geocoder reverseGeocodeLocation:self.locationManager.location 
    completionHandler:^(NSArray *placemarks, NSError *error) { 
     NSLog(@"reverseGeocodeLocation:completionHandler: Completion Handler called!"); 

     if (error){ 
      NSLog(@"Geocode failed with error: %@", error);    
      return; 

     } 

     if(placemarks && placemarks.count > 0) 

     { 
      //do something 
      CLPlacemark *topResult = [placemarks objectAtIndex:0]; 
      NSString *addressTxt = [NSString stringWithFormat:@"%@ %@,%@ %@", 
            [topResult subThoroughfare],[topResult thoroughfare], 
            [topResult locality], [topResult administrativeArea]]; 
      NSLog(@"%@",addressTxt); 
     } 
    }]; 

Muchas gracias.

+0

El simulador devuelve el error 8 ahora, mientras que no hice nada a mi código. – goofansu

+1

CLLocationManager, CLGeocoder No funcionará en el simulador. Mostrará los resultados solo en la eliminación de errores en el dispositivo o las pruebas en el dispositivo. En Simulator mostrará error. –

+0

Esto funciona como un encanto en mi dispositivo iPhone 4. ¡Gracias! – gstroup

Respuesta

16

Los códigos de error de ubicación central son documented here.

valores Código 8, 9 y 10 son:

kCLErrorGeocodeFoundNoResult, 
kCLErrorGeocodeFoundPartialResult, 
kCLErrorGeocodeCanceled 

Basado en el código que se muestra, la razón más probable es que se obtendría de error 8 es que está tratando de usar location inmediatamente después de llamar startUpdatingLocation a la cual es posible que todavía sea nil.

Por lo general, demora unos segundos obtener la ubicación actual y es muy probable que sea nil hasta ese momento (lo que da como resultado un error de geocodificación 8 o kCLErrorGeocodeFoundNoResult). No estoy seguro de qué significa el código de error 9 por "FoundPartialResult", pero la aplicación de muestra GeocoderDemo de Apple trata ambas cosas de la misma manera (como "Sin resultado").

Intente mover el código de geocodificación (todo el código después de la llamada startUpdatingLocation) al método delegado locationManager:didUpdateToLocation:fromLocation:. El administrador de la ubicación llamará a ese método de delegado cuando en realidad tiene una ubicación y solo entonces es seguro usar location.

Allí, después de que la geocodificación se haya realizado correctamente (o no), puede llamar al stopUpdatingLocation, de lo contrario, intentará geocodificar cada vez que se actualice la ubicación del usuario.

Es posible que también desee comprobar la precisión (newLocation.horizontalAccuracy) y la edad (newLocation.timestamp) de la ubicación recibida antes de intentar geocodificarla.

+0

Gracias. Después de mover mi código de acuerdo con su consejo, muestra el error 9 incluso si configuré mi CCLocation como 'CLLocation * location = [[CLLocation alloc] initWithLatitude: 37.78583400 longitud: -122.40641700];'. Tal vez haya algún error en el simulador, voy a probarlo en mi dispositivo. – goofansu

1

Resulta que mezclé la longitud y la latitud al crear la ubicación. Pensé que agregaría esto como algo para que la gente revise.

Cuestiones relacionadas