Как вытащить поле Страна из 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);