如何获取iPhone地址簿联系人的电子邮件作为NSStrings?

时间:2009-10-29 18:09:25

标签: iphone objective-c cocoa-touch abaddressbook

我知道电子邮件可能有多个值,但我不确定如何浏览它们。

我可以正确地找到一个人。

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

......下一步是什么?如果我尝试打印emails变量,我会得到:

Emails: <NSCFType: 0x4018d40>

3 个答案:

答案 0 :(得分:16)

这是因为电子邮件不应该是字符串,而是数组。人们可以收到很多电子邮件!

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

Here是关于您可以使用MultiValueLists

执行的操作的一些文档

答案 1 :(得分:4)

此条目的类型为ABMultiValue(具体而言,此字段的类型为kABMultiStringProperty)。有关如何阅读这些内容,请参阅"Using Multivalue Lists"。请参阅Address Book Objective-C Constants Reference了解每个属性返回的内容。

另外,请记住AB功能受Create Rule的约束。您负责释放从函数中获得的对象,其中包含“复制”一词。

答案 2 :(得分:1)

在iOS 9中,ABFramework已被弃用于新的 Contacts Framework

我向您展示了一个记录CNContact的每个电子邮件地址的示例:

CNContact * yourContact = //...

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