2013-02-28 2 views
2

전화 번호부와 icloud에서 연락처 배열을 반환하기 때문에 ABRecordRef의 출처를 알아야합니다. 결과적으로 같은 사람 (가장 성, 성)과 이중 연락처가 있기 때문에 ABRecordRef의 출처를 알아야합니다. , 그러나 다른 ABRecordID recordId = 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]; 
} 
확인