某些用户在他们的iPhone联系人中有多个地址簿,这是由于他们使用的联系人不同。 Exchange服务器。iPhone:您如何获得iPhone上所有地址簿的名称?
如何获取所有这些不同的地址簿?我希望获取保存这些不同地址簿的姓名以及访问他们的联系信息。
谢谢!
某些用户在他们的iPhone联系人中有多个地址簿,这是由于他们使用的联系人不同。 Exchange服务器。iPhone:您如何获得iPhone上所有地址簿的名称?
如何获取所有这些不同的地址簿?我希望获取保存这些不同地址簿的姓名以及访问他们的联系信息。
谢谢!
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)
来获取源中的条目。
iOS上只有一个集中的地址簿数据库,可通过一组C函数访问,请参阅ABAddressBook和iOS address book programming guide。
您可能指的是该地址簿中的组。在这种情况下,您可以按reference on ABGroup
中所述使用ABAddressBookCopyArrayOfAllGroups
函数获取组列表。
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
上的`ABPerson`文档。在CFRelease(sourceType)上 - 用ARC。 – Borzh 2014-10-04 15:51:12