您好我的iPhone地址簿中有多个群组,其中包含多个联系人。例如:
iPhone地址簿,Group1,Group2等。
每个群组都包含联系人信息,如名字,姓氏,电子邮件,电话号码。现在,通过选择任何组,我应该获得其中添加的联系人的所有详细信息。有人可以指导我如何从特定组中获取所有联系人详细信息?
请提供一些指导。
答案 0 :(得分:10)
CFErrorRef error = NULL;
ABAddressBookRef addrBook = ABAddressBookCreate();
CFArrayRef groups = ABAddressBookCopyArrayOfAllGroups(addrBook);
CFIndex numGroups = CFArrayGetCount(groups);
for(CFIndex idx=0; idx<numGroups; ++idx) {
ABRecordRef groupItem = CFArrayGetValueAtIndex(groups, idx);
CFArrayRef members = ABGroupCopyArrayOfAllMembers(groupRef);
if(members) {
NSUInteger count = CFArrayGetCount(members);
for(NSUInteger idx=0; idx<count; ++idx) {
ABRecordRef person = CFArrayGetValueAtIndex(members, idx);
// your code
}
CFRelease(members);
}
}
CFRelease(groups);
CFRelease(addrBook);
此代码不保证防漏,因此请仔细检查。它或多或少是正确的。
答案 1 :(得分:2)
文档中解释了所有内容,因此请使用您不理解的内容。你尝试了什么?你得到了什么,你有哪些错误?
如果您想使用联系人,除了非常完整的Address Book Programming Guide之外,您当然还有the Address Book Framework Reference,尤其是the ABGroup Reference Documentation来处理群组。而后者包含an explicitly a method to get all members of a group。所以你应该拥有你需要的一切。
CFArrayRef cfmembers = ABGroupCopyArrayOfAllMembers(group);
NSArray* members = (NSArray*)cfmembers; // working with NSArray is usually easier that CFArrays so I like using toll-free bridging
for(ABRecordRef person in members)
{
// ... your code ...
}
CFBridgingRelease(cfmembers); // release memory when done, following the usual memory mgmt rules