iPhone:你如何获得iPhone上所有通讯录的名称?

时间:2011-01-13 13:57:47

标签: iphone objective-c addressbook exchange-server

某些用户的iPhone联系人中有多个地址簿,因为他们使用不同的同步连接。 Exchange Servers。

如何获得所有这些不同的地址簿?我有兴趣获取保存这些不同地址簿的名称并访问其联系信息。

谢谢!

2 个答案:

答案 0 :(得分:6)

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef sourcesArray = ABAddressBookCopyArrayOfAllSources(addressBook);
for (CFIndex i = 0; i < CFArrayGetCount(sourcesArray); i++) {
    ABRecordRef source = (ABRecordRef)CFArrayGetValueAtIndex(sourcesArray, i);
    ABRecordID sourceID = ABRecordGetRecordID(source);
    CFNumberRef sourceType = (CFNumberRef)ABRecordCopyValue(source, kABSourceTypeProperty);
    CFStringRef sourceName = (CFStringRef)ABRecordCopyValue(source, kABSourceNameProperty);
    NSLog(@"source id=%d type=%d name=%@", sourceID, [(NSNumber *)sourceType intValue], sourceName);
    CFRelease(sourceType);
    if (sourceName != NULL) CFRelease(sourceName); // some source names are NULL
}
CFRelease(sourcesArray);
CFRelease(addressBook);

请注意,从iOS 4开始,并非所有来源都会返回名称。您可以根据类型提供自己的名称。

使用ABAddressBookCopyArrayOfAllPeopleInSource(addressBook, source)获取来源中的条目。

答案 1 :(得分:-1)

iOS上只有一个集中的地址簿数据库,可通过一组C函数访问,请参阅ABAddressBookiOS address book programming guide

您可能指的是该通讯录中的群组。在这种情况下,您可以使用reference on ABGroup中所述的ABAddressBookCopyArrayOfAllGroups函数获取组列表。