2011-01-13 3 views
3

일부 사용자는 iPhone과의 동기화 연결이 서로 다름으로 인해 iPhone 주소록에 주소록이 여러 개 있습니다. Exchange 서버.iPhone : iPhone에서 모든 주소록의 이름을 어떻게 얻습니까?

어떻게 이러한 모든 주소록을 가져올 수 있습니까? 이 주소록을 저장하고 연락처 정보에 액세스하는 데 필요한 이름을 얻는 데 관심이 있습니다.

감사합니다.

답변

6
ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef sourcesArray = ABAddressBookCopyArrayOfAllSources(addressBook); 
for (CFIndex i = 0; i < CFArrayGetCount(sourcesArray); i++) { 
    ABRecordRef source = (ABRecordRef)CFArrayGetValueAtIndex(sourcesArray, i); 
    ABRecordID sourceID = ABRecordGetRecordID(source); 
    CFNumberRef sourceType = (CFNumberRef)ABRecordCopyValue(source, kABSourceTypeProperty); 
    CFStringRef sourceName = (CFStringRef)ABRecordCopyValue(source, kABSourceNameProperty); 
    NSLog(@"source id=%d type=%d name=%@", sourceID, [(NSNumber *)sourceType intValue], sourceName); 
    CFRelease(sourceType); 
    if (sourceName != NULL) CFRelease(sourceName); // some source names are NULL 
} 
CFRelease(sourcesArray); 
CFRelease(addressBook); 

iOS 4부터 모든 소스가 이름을 반환하지는 않습니다. 유형에 따라 고유 한 이름을 제공 할 수 있습니다.

소스에 항목을 가져 오려면 ABAddressBookCopyArrayOfAllPeopleInSource(addressBook, source)을 사용하십시오.

+0

충돌이 있습니다. CFRelease (sourceType)에 - ARC와 함께. – Borzh

+0

ABAddressBookCreate() 대신 ABAddressBookCreateWithOptions (NULL, NULL)을 사용합니다. –

-1

iOS에는 C 함수 집합을 통해 액세스 할 수있는 중앙 집중식 주소록 데이터베이스가 하나만 있습니다 (ABAddressBookiOS address book programming guide 참조).

해당 주소록의 그룹을 참조했을 수 있습니다. 이 경우 reference on ABGroup에 설명 된대로 ABAddressBookCopyArrayOfAllGroups 기능을 사용하여 그룹 목록을 가져올 수 있습니다.

+0

http://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/DirectInteraction.html의 Apple 설명서 : "아래의 코드 목록은 전체 주소록 데이터베이스 : "ABAddressBookCopyArrayOfAllPeople'을 사용하여 전체 데이터베이스에 액세스합니다. 'ABAddressBookCopyArrayOfAllPeopleInSource' 메소드는 더 제한적인 버전입니다. http://developer.apple.com/library/ios/#documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/Reference/reference.html의 'ABPerson' 문서를 참조하십시오. – user8472

관련 문제