2009-10-29 2 views
5

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

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

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

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

Emails: <NSCFType: 0x4018d40> 

ответ

16

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

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

Here некоторые документы на вещи, которые вы можете сделать с MultiValueLists

+0

Спасибо! Вы знаете, как я могу получить размер массива «emails», чтобы я мог его просматривать? – marcgg

+0

Я добавил ссылку на документы, где вы найдете метод «count» – coneybeare

+0

для счета. Я закончил это с помощью: CFIndex count = ABMultiValueGetCount (email); – marcgg

4

Тип этой записи является ABMultiValue (в частности, тип этого поля является kABMultiStringProperty). См. "Using Multivalue Lists" о том, как их читать. См. Address Book Objective-C Constants Reference, для чего возвращается каждое свойство.

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

1

В прошивке 9, ABFramework устаревший для нового Контакты Framework:

я покажу вам пример, чтобы регистрировать каждый адрес электронной почты в CNContact:

CNContact * yourContact = //... 

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