Как получить адреса контактов адресной книги iPhone как NSStrings?
-
10-07-2019 - |
Вопрос
Я знаю, что для электронной почты может быть несколько значений, но я не уверен, как их просмотреть.
Я могу правильно понять человека.
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]);
}