0

Hey! Grundsätzlich möchte ich meine Koordinaten für meine Annotation geocodieren und die Adresse als Untertitel für meine gespeicherte Annotation anzeigen (StorePosition). Ich kann einfach nicht herausfinden, wie es geht ... Was mache ich falsch?Adresse als Untertitel in einer Anmerkung festlegen

BEARBEITEN; .m

-(NSString *)subtitle{   
return subtitle; 

    - (void)setCoordinate:(CLLocationCoordinate2D)c { 
     MKReverseGeocoder *rvg = [[MKReverseGeocoder alloc] initWithCoordinate:c]; 
     rvg.delegate = self; 
     [rvg start]; 
     coordinate = c; 
    } 

    - (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark { 
     self.subtitle = [placemark.addressDictionary valueForKey:@"Street"]; 
    } 

Antwort

3

// EDIT 2: vielleicht, dass Ihr Problem löst, implementieren Ihre eigenen Koordinaten Setter und Wunsch gibt Ihre Reverse Geocoder:

-(NSString *)subtitle{ 
    if (!subtitle) { 
     return @"No Street"; 
    } else { 
     return subtitle; 
    } 
} 

-(NSString *)title{ 
    return @"Saved position"; 
} 

- (void)setCoordinate:(CLLocationCoordinate2D)c { 
    MKReverseGeocoder *rvg = [[MKReverseGeocoder alloc] initWithCoordinate:c]; 
    rvg.delegate = self; 
    [rvg start]; 
    coordinate = c; 
} 


-(id)initWithCoordinate:(CLLocationCoordinate2D) coor{ 
    self.coordinate=coor; 
    NSLog(@"%f,%f",coor.latitude,coor.longitude); 
    return self; 
} 

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error { 
    NSLog(@"fail %@", error); 
} 

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark { 
    self.subtitle = [placemark.addressDictionary valueForKey:@"Street"]; 
} 

// ORIGINAL:
Zuerst können darüber reden, Ihre Fehler: D

return [NSString stringWithFormat:@"%f", streetAddress]; 

%f ist für float-Werte, so wäre es nicht eine Zeichenfolge angezeigt werden soll.
Die zweite Sache, Ihre Variable streetAddress existiert zu diesem Zeitpunkt nicht, Sie sollten es zugänglich machen, indem Sie es in Ihre Header-Datei schreiben.

Dann in initWithCoordinate: rufen Sie return self; alle Dinge, nachdem diese Zeile nie aufgerufen wird. Also dein ReverseGeocoder nie starten.

NSString *streetAddress = … 

Hier möchten Sie Ihre Adresse speichern, aber Sie schreiben sie nur in eine Variable, die nur in dieser Methode existiert. Nach der Methode wird diese Variable freigegeben. Sie würden es in Ihrer klassenweiten Variable speichern, wenn Sie es in Ihrer Header-Datei definiert hätten.

Jetzt reden wir über einen Weg, wie Sie das tun können. Was ich tun würde, ist, den umgekehrten Geocoder aus Ihrer Annotation zu ziehen und in Ihren mapView Controller zu legen. Wenn Sie einen neuen Speicherort erhalten, ändern Sie den Untertitel Ihrer Anmerkung.

[[mapView.annotations objectAtIndex:0] setSubtitle:@"Address Information"]; 

// EDIT: Sie können sich mit Ihrem didFailWith und Sie werden sehen, dass er nicht die Position anfordern. Selbst wenn Sie Ihre reverseGeocoder-init über die Rückkehr setzen, hat es immer noch nicht genug Zeit, um den Standort anzufordern.

+0

Bitte werfen Sie einen Blick auf die Bearbeitung! : D Ich verstehe nicht, wie ich das auch für die StorePosition machen soll! – Krismutt

+0

Die Selbstkoordinate = coor; würde nicht funktionieren, wenn es nur gelesen wird, also entweder entfernst du das self (aber dann würde der Init-Ort nicht geocodiert werden) ODER du überschreibst es mit einem Readwrite in @interface über deiner @implementation (in deiner .m Datei) –

+0

Ich bekomme zwei build errors: "'Untertitel' nicht deklariert (erste Verwendung in dieser Funktion)" und "Objekt kann nicht gesetzt werden - entweder readonly Eigenschaft oder kein Setter gefunden" ... bin ein echter Neuling .. bitte help – Krismutt

Verwandte Themen