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 に答える