5

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

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

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

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

Emails: <NSCFType: 0x4018d40>
4

3 回答 3

16

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

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

这里有一些关于你可以用 MultiValueLists 做的事情的文档

于 2009-10-29T18:16:20.900 回答
4

该条目的类型是 a ABMultiValue(具体来说,该字段的类型是 a kABMultiStringProperty)。有关如何阅读这些内容,请参阅“使用多值列表” 。有关每个属性返回的内容,请参阅地址簿 Objective-C 常量参考

另外,请记住 AB 函数受Create Rule的约束。你有责任释放你从一个函数中获得的对象,其中包含“复制”这个词。

于 2009-10-29T18:17:26.610 回答
1

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

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

CNContact * yourContact = //...

for (CNLabeledValue* emailLabeledValue in yourContact.emailAddresses){
    NSLog(@"%@",[emailLabeledValue value]);
}
于 2015-09-21T14:43:18.550 回答