Как создать addressDictionary для MKPlacemark? - PullRequest
30 голосов
/ 16 октября 2011
    placemark = [[MKPlacemark alloc]initWithCoordinate:storedCoordinate addressDictionary:addressDict];

Я попытался создать словарь для кода выше, но ничего не работает: (

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

Ответы [ 2 ]

48 голосов
/ 27 ноября 2012

При создании addressDictionary для MKPlacemark рекомендуется использовать константы «Address Property», как определено в ABPerson.Обратите внимание, поскольку эти константы имеют тип CFStringRef, поэтому вам необходимо привести их к (NSString *), чтобы использовать их в качестве ключей в 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
                              };

Обновление для iOS 9+: Использовать новую платформу контактов

NSDictionary *addressDict = @{
                              CNPostalAddressStreetKey : location.street,
                              CNPostalAddressCityKey : location.city,
                              CNPostalAddressStateKey : location.state,
                              CNPostalAddressPostalCodeKey : location.zip,
                              CNPostalAddressCountryKey : location.country,
                              CNPostalAddressISOCountryCodeKey : location.countryCode
                              };
14 голосов
/ 09 октября 2013

Стоит отметить, что вам нужно будет добавить «AddressBook.framework» в настройки сборки вашего проекта. Также импортируйте в свой заголовок (файл .h):

#import <AddressBook/AddressBook.h>

Тогда в вашей реализации (файл .m) вы можете использовать:

(NSString*)kABPersonAddressStreetKey
(NSString*)kABPersonAddressCityKey
(NSString*)kABPersonAddressStateKey
(NSString*)kABPersonAddressCountryKey
...