2010-04-14 6 views
3

J'essaie de récupérer le nom de la ville avec cllocation et mkreversegeocoder. dans ma méthode viewDidLoad i Istance cllocationmanager:cllocation et mkreversegeocoder

self.locManager = [[CLLocationManager alloc] init]; 
locManager.delegate = self; 
locManager.desiredAccuracy = kCLLocationAccuracyBest; 
[locManager startUpdatingLocation]; 

et après:

- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation 
*)newLocation 
fromLocation:(CLLocation *)oldLocation { 
//some code to retrieve my information 

MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc]  
initWithCoordinate:newLocation.coordinate ]; 
geoCoder.delegate = self; 
[geoCoder start]; 
} 

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark 
*)placemark 
{ 
MKPlacemark *myPlacemark = placemark; 
citta.text = [placemark locality]; 
} 

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{ 
citta.text [email protected] "Unknow"; 

application ne fonctionne que la première fois que je reçois ma valeur. sur la deuxième fois le crash de l'application. Je pense que c'est parce que geocoder est démarré et je pense que je dois avoir un et un seul istance en cours d'exécution. (mais je ne suis vraiment pas sûr de ça ...). de quelle façon je peux contrôler geocoder est en cours d'exécution?

J'ai vu que je peux istance mkreversegeocoder dans mon viewdidload en utilisant cllocationcoordinate2d mais ... de quelle façon je peux récupérer newlocation.coordinate?

J'ai résoudre en partie déclarant géocodage comme variable de classe et la vérification

if (self.geocoder != nil) { 
    [geocoder release]; 
} 

mais .... si dans mon

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark 
*)placemark 

ou dans mon

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailedWithError:(@NSError 
*)error 

i libérer ou annuler mon objet? Je me sens si stupide: D

+0

'[aucune version];' fonctionne (ne fait rien) donc il n'y a pas besoin de vérifier. –

Répondre

7

Ne créez pas le géocodeur inverse en tant que variable locale.

Regardez l'exemple MKReverseGeocoder dans l'exemple d'application CurrentAddress fourni par Apple. Voir MapViewController.h et MapViewController.m.

Suivez le même modèle dans votre code.

+0

shure à la fin je l'ai fait de cette façon, maintenant je l'ai modifié avec autorelease un pas de vérification si geocoder est en cours d'exécution de toute façon – zebra

Questions connexes