iPhone: Как узнать имена всех адресных книг на iPhone?

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

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

Спасибо!


person Andrei    schedule 13.01.2011    source источник


Ответы (2)


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) для получения записей в источнике.

person yakovlev    schedule 15.06.2011
comment
У меня произошел сбой на CFRelease (sourceType) - с ARC. - person Borzh; 04.10.2014
comment
ABAddressBookCreate() устарел, вместо этого используйте ABAddressBookCreateWithOptions(NULL, NULL) - person Omer Aslam; 24.03.2015

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

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

person user8472    schedule 14.01.2011
comment
Документация Apple по адресу developer.apple.com/ library/ios/#documentation/ContactData/ : Листинг ниже В следующем листинге кода показан пример сортировки всей базы данных Address Book: использует ABAddressBookCopyArrayOfAllPeople для доступа ко всей базе данных. Метод ABAddressBookCopyArrayOfAllPeopleInSource является более ограниченной версией, см. документацию ABPerson по адресу developer.apple.com/library/ios/#documentation/AddressBook/ - person user8472; 17.01.2013