How to get an iPhone address book contact's em

2020-06-19 03:11发布

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>

3条回答
Luminary・发光体
2楼-- · 2020-06-19 03:17

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

查看更多
姐就是有狂的资本
3楼-- · 2020-06-19 03:26

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]);
}
查看更多
够拽才男人
4楼-- · 2020-06-19 03:30

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.

查看更多
登录 后发表回答