2011-01-13 149 views
3

某些用戶在他們的iPhone聯繫人中有多個地址簿,這是由於他們使用的聯繫人不同。 Exchange服務器。iPhone:您如何獲得iPhone上所有地址簿的名稱?

如何獲取所有這些不同的地址簿?我希望獲取保存這些不同地址簿的姓名以及訪問他們的聯繫信息。

謝謝!

回答

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)來獲取源中的條目。

+0

上的`ABPerson`文檔。在CFRelease(sourceType)上 - 用ARC。 – Borzh 2014-10-04 15:51:12

-1

iOS上只有一個集中的地址簿數據庫,可通過一組C函數訪問,請參閱ABAddressBookiOS address book programming guide

您可能指的是該地址簿中的組。在這種情況下,您可以按reference on ABGroup中所述使用ABAddressBookCopyArrayOfAllGroups函數獲取組列表。

+0

Apple文檔http://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/DirectInteraction.html:下面的清單「下面的代碼清單顯示了排序整個地址簿數據庫:「使用`ABAddressBookCopyArrayOfAllPeople`來訪問整個數據庫。 `ABAddressBookCopyArrayOfAllPeopleInSource`方法是一個更受限制的版本,請參閱http://developer.apple.com/library/ios/#documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/Reference/reference.html – user8472 2013-01-17 08:37:20