2013-02-28 2 views
2

Мне нужно выяснить источник ABRecordRef, потому что метод ниже возвращает массив контактов из телефонной книги и icloud, и в результате есть двойные контакты с одним и тем же человеком (более высокий, фамильный) , но с другой записью ABRecordID record = ABRecordGetRecordID (запись) ;?Источник ABRecordRef (телефонная книга или icloud)

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

Source of the answer

добавить новый набор

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]; 
} 
Смежные вопросы