6

嗨,我的 iPhone 通讯录中有多个群组,其中包含多个联系人。例如:

iPhone 通讯录、Group1、Group2 等

每个组都包含联系人信息,例如名字、姓氏、电子邮件、电话号码。现在通过选择任何组,我应该在其中获得添加联系人的所有详细信息。谁能指导我如何获取特定组的所有联系人详细信息?

请需要一些指导方针。

4

2 回答 2

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);

此代码不保证防漏,因此请仔细检查。它或多或少是正确的。

于 2012-09-27T11:47:56.077 回答
2

一切都在文档中进行了解释,所以请告诉使用您不了解的内容。你尝试了什么?你得到了什么,你有哪些错误?

如果您想使用联系人,除了非常完整的通讯录编程指南之外,您当然还有通讯录框架参考,尤其是 ABGroup 参考文档来使用组。后者包含一个明确的方法来获取一个组的所有成员。所以你应该在这里拥有你需要的一切。

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
于 2012-09-27T11:41:03.150 回答