从ABPerson对象中检索记录

时间:2013-08-06 12:39:02

标签: macos cocoa abaddressbook

我正试图从Cocoa中的ABPerson对象获取Country。

我的工作是:

NSString *country = [person valueForProperty:kABAddressCountryKey];

我在控制台中得到了这个:

  

- [ABPerson valueForProperty:Country] - 未知属性。每个会话每个未知属性仅显示一次此警告。

获取人员的组织名称(kABOrganizationProperty),firstName(kABFirstNameProperty)和lastName(kABLastNameProperty)有效。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

因为密钥kABAddressCountryKey表示它代表地址的值。由于人可以拥有多个地址(表示为词典),因此您必须循环地址以获取国家/地区:

ABMultiValueRef addressesRef = ABRecordCopyValue(personRef, kABPersonAddressProperty);

for (int i = 0; i < ABMultiValueGetCount(addressesRef); i++)
{
    CFDictionaryRef oneAddressRef = ABMultiValueCopyValueAtIndex(addressesRef, i);
    NSString *country = CFRetain(CFDictionaryGetValue(oneAddressRef, kABPersonAddressCountryCodeKey));
    // Do fancy things with country...
    CFRelease(country);
    CFRelease(oneAddressRef);
}

CFRelease(addressesRef);

Haven终于测试了它,但它应该这样工作。另请考虑Core Foundation Memory Management