2011-10-16 5 views
27
placemark = [[MKPlacemark alloc]initWithCoordinate:storedCoordinate addressDictionary:addressDict]; 

Ho cercato di creare dizionario da utilizzare per codice di cui sopra, ma niente funziona :(Come creare addressDictionary per MKPlacemark?

NSDictionary *addressDict = [[NSDictionary alloc] initWithObjectsAndKeys: 
    location.countryCode, @"CountryCode", 
    location.country,@"kABPersonAddressCountryKey", 
    location.state, kABPersonAddressStateKey, 
    location.city, @"City", 
    location.street, kABPersonAddressStreetKey, 
    location.zip, kABPersonAddressZIPKey, 
    nil]; 
+1

La chiave Paese è tra virgolette, ma non dovrebbe essere. Vedi [questa domanda] (http://stackoverflow.com/q/1923525/467105). – Anna

+0

Ho appena mostrato diverse varianti, nessuna di esse funziona – Shmidt

+0

Puoi descrivere di più come non funziona? Ad esempio, se si blocca quale è il messaggio di errore? Se non crash allora cosa esattamente? Che cosa fai della variabile placemark dopo l'init? – Anna

risposta

44

Quando si crea l'addressDictionary per il MKPlacemark, si consiglia di utilizzare l ' "indirizzo proprietà" costanti come definito all'interno ABPerson. Nota, dal momento che queste costanti sono di tipo CFStringRef, quindi sarà necessario per gettarli in un (NSString *) al fine di utilizzarli come chiavi all'interno del NSDictionary.

NSDictionary *addressDict = @{ 
           (NSString *) kABPersonAddressStreetKey : location.street, 
           (NSString *) kABPersonAddressCityKey : location.city, 
           (NSString *) kABPersonAddressStateKey : location.state, 
           (NSString *) kABPersonAddressZIPKey : location.zip, 
           (NSString *) kABPersonAddressCountryKey : location.country, 
           (NSString *) kABPersonAddressCountryCodeKey : location.countryCode 
           }; 

updat e per iOS 9+: Usa nuovi contatti quadro

NSDictionary *addressDict = @{ 
           CNPostalAddressStreetKey : location.street, 
           CNPostalAddressCityKey : location.city, 
           CNPostalAddressStateKey : location.state, 
           CNPostalAddressPostalCodeKey : location.zip, 
           CNPostalAddressCountryKey : location.country, 
           CNPostalAddressISOCountryCodeKey : location.countryCode 
           }; 
+2

Se stai usando ARC devi aggiungere '__bridge' al cast, come: ' (__bridge NSString *) kABPersonAddressStreetKey: location.street' –

+2

che crummy api –

+0

Non dimenticate di #importare (<= 8.x) #import (> = 9.x) – user3589771

14

Da segnalare che è necessario aggiungere il 'AddressBook.framework' alle tue impostazioni di generazione del progetto. importare anche nella tua intestazione (file .h):

#import <AddressBook/AddressBook.h> 

Poi nell'implementazione (file .m) è possibile utilizzare:

(NSString*)kABPersonAddressStreetKey 
(NSString*)kABPersonAddressCityKey 
(NSString*)kABPersonAddressStateKey 
(NSString*)kABPersonAddressCountryKey 
+0

Grande chiarimento: la dichiarazione di importazione –

+0

era la chiave per risolvere il mio problema. –