Как получить адреса контактов адресной книги iPhone как NSStrings? - PullRequest
5 голосов
/ 29 октября 2009

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

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

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

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

Emails: <NSCFType: 0x4018d40>

Ответы [ 3 ]

16 голосов
/ 29 октября 2009

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

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

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

4 голосов
/ 29 октября 2009

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

Кроме того, помните, что функции AB подпадают под действие правила

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

1 голос
/ 21 сентября 2015

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

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

CNContact * yourContact = //...

for (CNLabeledValue* emailLabeledValue in yourContact.emailAddresses){
    NSLog(@"%@",[emailLabeledValue value]);
}
...