2012-03-02 13 views
12

Sto sviluppando un app iOS con il geocoding inverso caratteristiche in base a questo articolo: geocoding tutorialCLGeocoder reverseGeocodeLocation restituisce 'kCLErrorDomain errore 9'

Ma quando ho test come questo sul simulatore, ottengo 'errore kCLErrorDomain 9'. Ho cercato un sacco e ci sono solo errore di 0 o 1 non 9.

Ecco il mio codice in 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); 
     } 
    }]; 

Grazie mille.

+0

Il simulatore restituisce l'errore 8 ora mentre non ho fatto nulla al mio codice. – goofansu

+1

CLLocationManager, CLGeocoder Non funziona sul simulatore. Visualizzerà i risultati solo sul debug sul dispositivo o sul test sul dispositivo. Sul simulatore mostrerà l'errore. –

+0

Funziona come un fascino sul mio dispositivo iPhone 4. Grazie! – gstroup

risposta

16

I codici di errore di posizione principale sono documented here.

Codice Valori 8, 9, e 10 sono:

kCLErrorGeocodeFoundNoResult, 
kCLErrorGeocodeFoundPartialResult, 
kCLErrorGeocodeCanceled 

Sulla base del codice mostrato, la ragione più probabile che si otterrebbe di errore 8 è che si sta cercando di usare location subito dopo aver chiamato startUpdatingLocation in cui il tempo potrebbe essere ancora nil.

Di solito occorrono alcuni secondi per ottenere la posizione corrente e molto probabilmente sarà nil fino ad allora (con conseguente errore di geocodifica 8 o kCLErrorGeocodeFoundNoResult). Non sono sicuro di quale codice di errore 9 indichi "FoundPartialResult", ma l'app di esempio GeocoderDemo di Apple tratta entrambi allo stesso modo (come "Nessun risultato").

Provare a spostare il codice di geocoding (tutto il codice dopo la chiamata startUpdatingLocation) al metodo delegato locationManager:didUpdateToLocation:fromLocation:. Il responsabile della posizione chiamerà quel metodo delegato quando in realtà ha una posizione e solo allora è sicuro usare location.

Qui, dopo il geocoding è riuscito (o non), si consiglia di chiamare stopUpdatingLocation altrimenti proverà geocodifica ogni volta che viene aggiornata la posizione dell'utente.

È anche possibile controllare la precisione (newLocation.horizontalAccuracy) e l'età (newLocation.timestamp) della posizione ricevuta prima di provare a eseguire il geocoding.

+0

Grazie. Dopo aver spostato il mio codice in base ai tuoi consigli, mostra l'errore 9 anche se ho impostato CCLocation come 'CLLocation * location = [[CLLocation alloc] initWithLatitude: 37.78583400 longitude: -122.40641700];'. Forse c'è qualcosa di sbagliato nel simulatore, lo testerò sul mio dispositivo. – goofansu

1

Si scopre che ho mescolato il longitute e la latitudine durante la creazione della posizione. Ho pensato di aggiungere questo come qualcosa da verificare per le persone.

Problemi correlati