Как вытащить поле Страна из ABAddressBookRef?

У меня проблемы с пониманием, как получить доступ к свойствам адреса в ABAddressBookRef. Я сделал это хорошо с номерами телефонов:

ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSArray* phoneNumbers = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty);
CFRelease(phoneNumberProperty);

Но увы... я не могу понять, как это сделать для адресов. Если я сделаю это:

ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);
NSArray *address = (NSArray *)ABMultiValueCopyArrayOfAllValues(addressProperty);

Я возвращаю то, что похоже на словарь, но оно напечатано как массив. Как я могу получить доступ к свойствам в нем? Я видел множество различных предложений в Интернете, но все они, кажется, содержат около 30 строк кода, просто чтобы извлечь одну строку из словаря!

Может кто-нибудь помочь, пожалуйста? Спасибо!

1 ответ

Решение

Для адресов вы получаете массив словарей, поэтому вы просматриваете массив и извлекаете нужное значение ключа из каждого словаря:

ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);
NSArray *address = (NSArray *)ABMultiValueCopyArrayOfAllValues(addressProperty);
for (NSDictionary *addressDict in address) 
{
    NSString *country = [addressDict objectForKey:@"Country"];
}
CFRelease(addressProperty);

Вы также можете перейти непосредственно через ABMultiValueRef вместо того, чтобы сначала преобразовать его в NSArray:

ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);

for (CFIndex i = 0; i < ABMultiValueGetCount(addressProperty); i++) 
{
    CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(addressProperty, i);
    NSString *country = (NSString *)CFDictionaryGetValue(dict, kABPersonAddressCountryKey);
    CFRelease(dict);
}

CFRelease(addressProperty);
Другие вопросы по тегам