在iPhone地址簿中查找某个人的“工作”电子邮件地址?
问题描述:
有没有办法从iPhone地址簿中找到某个人的特定类型的电子邮件地址?我知道如何获得一个人的所有电子邮件地址,而不知道如何识别它是什么类型的电子邮件地址(“家庭”,“工作”等)......也不是(这可能更可取),这是一种直接访问该地址的方法,无需遍历所有地址。在iPhone地址簿中查找某个人的“工作”电子邮件地址?
谢谢。
答
使用ABMultiValueCopyLabelAtIndex检查kABWorkLabel的标签。
举例来说,如果你有一个ABRecordRef命名为“人”,这个代码将设置为“EMAILADDRESS”单一的NSString:
// Email address (if only one, use it; otherwise, use the first work email address)
CFStringRef value, label;
ABMutableMultiValueRef multi = ABRecordCopyValue(person, kABPersonEmailProperty);
CFIndex count = ABMultiValueGetCount(multi);
if (count == 1) {
value = ABMultiValueCopyValueAtIndex(multi, 0);
emailAddress = (NSString*)value;
[emailAddress retain];
CFRelease(value);
} else {
for (CFIndex i = 0; i < count; i++) {
label = ABMultiValueCopyLabelAtIndex(multi, i);
value = ABMultiValueCopyValueAtIndex(multi, i);
// check for Work e-mail label
if (label && CFStringCompare(label, kABWorkLabel, 0) == 0) {
emailAddress = (NSString*)value;
[emailAddress retain];
break;
}
CFRelease(label);
CFRelease(value);
}
}
CFRelease(multi);
刚刚凝结的响应,秘密在这里是得到了kABWorkLabel一个工作地址。请注意,尽管您的代码存在潜在的泄漏问题,因为可能会有多个工作电子邮件地址,所以应该在设置之前发布emailAddress,或者您需要跳出循环,或者(更好)您需要吐出工作电子邮件地址列表。 – 2010-01-22 20:56:22
好点。我从我的应用程序中获取了这个信息,实际上我正在设置一个属性(不泄漏),我只关心一个属性。 – gerry3 2010-01-22 20:58:31
如果设置了多个电子邮件地址但未分配工作标签,则上述代码将失败。如果设置了多个地址但标签丢失,它也会失败,因为CFStringCompare会崩溃。不过谢谢发布! – 2012-04-20 10:05:28