在iPhone地址簿中查找某人的"工作"电子邮件地址?

Gre*_*tic 5 email iphone addressbook

有没有办法从iPhone地址簿中找到某个人的特定电子邮件地址?我知道如何获取一个人的所有电子邮件地址,而不是如何识别它是什么类型的电子邮件地址("家庭","工作"等)......也不是(这可能更可取),一种直接访问该地址而无需遍历所有地址的方法.

谢谢.

ger*_*ry3 15

使用ABMultiValueCopyLabelAtIndex检查kABWorkLabel的标签.

例如,如果您有一个名为"person"的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);
Run Code Online (Sandbox Code Playgroud)

  • 只是为了压缩响应,这里的秘密是kABWorkLabel,它获取了一个工作地址.请注意,您的代码存在潜在的泄漏问题,因为可能存在大量工作电子邮件地址,因此在设置之前应该发布emailAddress,或者您需要突破循环,或者(更好)您需要吐出一个一系列工作电子邮件地址. (3认同)