iPhone: Как вы получаете названия всех адресных книг на iPhone? - PullRequest
3 голосов
/ 13 января 2011

Некоторые пользователи имеют несколько адресных книг в своих контактах iPhone в результате различных подключений синхронизации, которые они установили, например, с помощью. Серверы Exchange.

Как можно получить все эти разные адресные книги? Мне было бы интересно узнать имена, под которыми сохраняются эти разные адресные книги, и получить доступ к их контактной информации.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 15 июня 2011
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 голосов
/ 14 января 2011

Существует только одна централизованная база данных адресной книги на iOS, доступная с помощью набора функций C, см. ABAddressBook и Руководство по программированию адресной книги iOS .

Возможно, вы имеете в виду группы в этой адресной книге. В этом случае вы можете получить список групп, используя функцию ABAddressBookCopyArrayOfAllGroups, как описано в справочнике в ABGroup.

...