Источник ABRecordRef (телефонная книга или icloud)
Мне нужно выяснить источник ABRecordRef, потому что метод ниже возвращает массив контактов из телефонной книги и icloud, и в результате возникают двойные контакты с одним и тем же человеком (имя, фамилия), но с другим ABRecordID recordId=ABRecordGetRecordID(запись);?
ABAddressBookRef addressBook;
if ([self isABAddressBookCreateWithOptionsAvailable]) {
CFErrorRef error = nil;
addressBook = ABAddressBookCreateWithOptions(NULL,&error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
} else if (!granted) {
} else {
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
for (int i = 0; i < nPeople; i++) {
// Get the next address book record.
ABRecordRef record = CFArrayGetValueAtIndex(allPeople, i);
ABRecordID recordId=ABRecordGetRecordID(record);
NSString* firstName = (__bridge_transfer NSString*)ABRecordCopyValue(record,kABPersonFirstNameProperty);
NSString* lastName = (__bridge_transfer NSString*)ABRecordCopyValue(record,kABPersonLastNameProperty);
CFTypeRef bDayProperty = ABRecordCopyValue((ABRecordRef)record, kABPersonBirthdayProperty);
NSDate *birthday;
if (ABRecordCopyValue((ABRecordRef)record, kABPersonBirthdayProperty))
{
birthday=(__bridge NSDate*)bDayProperty;
}
}
CFRelease(addressBook);
}
});
});
} else {
// iOS 4/5
addressBook = ABAddressBookCreate();
CFRelease(addressBook);
}
1 ответ
Решение
добавить новый набор
NSMutableSet *linkedPersonsToSkip = [[NSMutableSet alloc] init];
и просто проверить для каждого человека
if ([linkedPersonsToSkip containsObject:(__bridge id)(record)]) {
continue;
}
NSArray *linked = (__bridge NSArray *) ABPersonCopyArrayOfAllLinkedPeople(record);
if ([linked count] > 1) {
[linkedPersonsToSkip addObjectsFromArray:linked];
}