3

MAC プラットフォームでは、ABPerson クラスに parentGroups 属性があり、その人がどのグループに属しているかがわかります。しかし、IOS プラットフォームでは、そのようなメソッドやプロパティはありません。

人の親グループを見つける方法は? すべてのグループを 1 つずつ検索する必要がありますか?

ありがとう。

4

3 に答える 3

6

別のスレッドで ABPersonCopyParentGroups について言及されていましたが、これは間違っています-na on ios.

API呼び出しがないため、これを直接行う必要があります

ABRecordRef personToFind = ....
ABRecordID id = ABRecordGetRecordID(personToFind);

NSArray *groups = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllGroups(bookRef);
for(ABGroupRef group in groups) {
    NSArray *members = (__bridge_transfer NSArray*)ABGroupCopyAllMembers(group);
    for(ABRecordRef member in members) {
        if(id == ABRecordGetRecordID(member){
            NSLog(@"found in group %@!", ABGroupCopyProperty(group, kABGroupName);
            break;
        }
    }            
}

*インラインで入力、保証はありません -- タイプミスの可能性があります!

于 2012-11-17T03:08:19.283 に答える
1

すべてのグループとその中の人をスキャンし、人のレコード ID とグループのレコード ID を NSDictionary に保存します。アプリがなくなるまでこの NDDictionary を保持するので、この NSDictionary を検索してユーザーのグループ ID を取得するだけです。

NSMutableDictionary *dic = [NSMutableDictionary dictionary];
CFArrayRef allGroup = ABAddressBookCopyArrayOfAllGroups( AddressBookManager.addressBook );

CFIndex nGroup = ABAddressBookGetGroupCount(AddressBookManager.addressBook);

NSMutableArray *array = [[NSMutableArray alloc] init];
for (CFIndex index = 0; index < nGroup; index ++) 
{
    ABRecordRef group = CFArrayGetValueAtIndex(allGroup, index);
    ABRecordID groupID = ABRecordGetRecordID(group);

    CFArrayRef allPeople = ABGroupCopyArrayOfAllMembers(group);

    CFIndex nPeople = CFArrayGetCount(allPeople);
    for( CFIndex personIndex = 0; personIndex < nPeople; personIndex++ )
    {
        ABRecordRef person = CFArrayGetValueAtIndex( allPeople, personIndex );
        ABRecordID personID = ABRecordGetRecordID(person);

        NSNumber *value = [NSNumber numberWithInt:groupID];
        NSString *key = [NSString stringWithFormat:@"%d", personID];
        [dic setValue:value forKey:key];
    }
    CFRelease(allPeople);
}
于 2014-11-16T06:31:28.890 に答える
1

Daij-Djan answer を使用するのが難しかったので、書き直しました。

CFArrayRef groupsRef = ABAddressBookCopyArrayOfAllGroups(myAddressBook);
if(groupsRef) {
    NSUInteger groupsCount = CFArrayGetCount(groupsRef);

    for(NSUInteger idx = 0; idx < groupsCount; ++idx) {
        ABRecordRef groupRef = CFArrayGetValueAtIndex(groupsRef, idx);
        ABRecordID groupID = ABRecordGetRecordID(groupRef);
        CFArrayRef membersRef = ABGroupCopyArrayOfAllMembers(groupRef);
        if(membersRef) {
            NSUInteger membersCount = CFArrayGetCount(membersRef);

            for(NSUInteger idx = 0; idx < membersCount; ++idx) {
                ABRecordRef memberRef = CFArrayGetValueAtIndex(membersRef, idx);
                ABRecordID memberID = ABRecordGetRecordID(memberRef);

                // your code
            }
            CFRelease(membersRef);
        }
    }
    CFRelease(groupsRef);
}
于 2014-10-30T09:51:19.633 に答える