2011-01-13 2 views
3

いくつかのユーザーは、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関数でアクセスできる集中型アドレス帳データベースが1つしかありません。ABAddressBookiOS address book programming guideを参照してください。

そのアドレス帳のグループを参照している可能性があります。その場合、reference on ABGroupの説明に従ってABAddressBookCopyArrayOfAllGroups関数を使用してグループのリストを取得できます。

+0

アップルのドキュメントhttp://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/DirectInteraction.html:以下のリストは、「全体のソートの例を示していますアドレスブックデータベース: "ABAddressBookCopyArrayOfAllPeople'を使用してデータベース全体にアクセスします。メソッド 'ABAddressBookCopyArrayOfAllPeopleInSource'はもっと制限されたバージョンです。http://developer.apple.com/library/ios/#documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/Reference/reference.htmlの' ABPerson'ドキュメントを参照してください。 – user8472

関連する問題