How to get an iPhone address book contact's emails as NSStrings?
Asked Answered
A

3

5

I know that there can be multiple values for an email, but I'm not sure how to browse through them.

I can get a person correctly.

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

... what's next? If I try to print the emails variable I get:

Emails: <NSCFType: 0x4018d40>
Absolute answered 29/10, 2009 at 18:9 Comment(0)
S
16

It is because emails should not be a string, but an array. People can have many emails!

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

Here are some docs on things you can do with MultiValueLists

Saveloy answered 29/10, 2009 at 18:16 Comment(3)
Thanks! Do you know how I can get the size of the "emails" array so I can browse it?Absolute
i added a link to the docs where you will find the 'count' methodSaveloy
for the count I ended up using this: CFIndex count = ABMultiValueGetCount(emails);Absolute
A
4

The type of this entry is an ABMultiValue (specifically, the type of this field is a kABMultiStringProperty). See "Using Multivalue Lists" for how to read these. See the Address Book Objective-C Constants Reference for what each property returns.

Also, remember that AB functions are subject to the Create Rule. You are responsible for releasing objects you get from a function with the word "Copy" in it.

Anabelle answered 29/10, 2009 at 18:17 Comment(0)
R
1

In iOS 9 the ABFramework has been deprecated for the new Contacts Framework:

I show you an example to log every email address of a CNContact:

CNContact * yourContact = //...

for (CNLabeledValue* emailLabeledValue in yourContact.emailAddresses){
    NSLog(@"%@",[emailLabeledValue value]);
}
Religion answered 21/9, 2015 at 14:43 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.