Как получить адреса контактов адресной книги iPhone как NSStrings?

StackOverflow https://stackoverflow.com/questions/1645567

Вопрос

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

Я могу правильно понять человека.

ABRecordRef person = // getting a person;
NSString* emails = (NSString *)ABRecordCopyValue(person, kABPersonEmailProperty);

... что дальше? Если я пытаюсь напечатать переменную emails , я получаю:

Emails: <NSCFType: 0x4018d40>
Это было полезно?

Решение

Это потому, что электронные письма должны быть не строкой, а массивом. У людей может быть много писем!

ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
CFStringRef email = ABMultiValueCopyValueAtIndex(emails, <INDEX>);
NSLog( (NSString *) email);

Здесь приведены некоторые документы о том, что вы можете делать с MultiValueLists

Другие советы

Тип этой записи - ABMultiValue (в частности, тип этого поля - kABMultiStringProperty ). См. " Использование многозначных списков " За то, как это читать. См. Справочник по константам Objective-C адресной книги для каждого возвращаемого свойства.

Также помните, что функции AB подчиняются Создать правило . Вы несете ответственность за освобождение объектов, которые вы получаете из функции со словом «Копировать». в этом.

В iOS 9 ABFramework устарела для новой структуры контактов :

Я покажу вам пример регистрации каждого адреса электронной почты CNContact:

CNContact * yourContact = //...

for (CNLabeledValue* emailLabeledValue in yourContact.emailAddresses){
    NSLog(@"%@",[emailLabeledValue value]);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top