MAC プラットフォームでは、ABPerson クラスに parentGroups 属性があり、その人がどのグループに属しているかがわかります。しかし、IOS プラットフォームでは、そのようなメソッドやプロパティはありません。
人の親グループを見つける方法は? すべてのグループを 1 つずつ検索する必要がありますか?
ありがとう。
MAC プラットフォームでは、ABPerson クラスに parentGroups 属性があり、その人がどのグループに属しているかがわかります。しかし、IOS プラットフォームでは、そのようなメソッドやプロパティはありません。
人の親グループを見つける方法は? すべてのグループを 1 つずつ検索する必要がありますか?
ありがとう。
別のスレッドで 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;
}
}
}
*インラインで入力、保証はありません -- タイプミスの可能性があります!
すべてのグループとその中の人をスキャンし、人のレコード 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);
}
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);
}