2

我开始为我的应用程序开发设置页面。

在此页面上,用户可以点击“+”按钮,该按钮将打开ABPeoplePickerNavigationController. 点击联系人时,设置页面上的文本字段将使用来自所选用户的正确数据进行适当填充。

我了解,如果我想检索某人的工作电子邮件,它是:

NSString *workEmail = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 1);

对于家庭来说,它将是:

NSString *homeEmail = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 0);

但就检索不同类型的电话号码而言,我被卡住了。

如果有人能告诉我如何获得不同类型的电话号码,希望类似于我收到两封电子邮件的方式,我将不胜感激。

4

1 回答 1

7

好吧,首先,你理解错了——不能保证用户的家庭电子邮件地址是#0。如果您只有该用户的工作电子邮件怎么办?然后它将在插槽 0 中。

你想要的是ABMultiValueCopyLabelAtIndex(),它与命名常量一起使用时会告诉你哪个是哪个:

ABPersonRef person = ...;
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
if (phoneNumbers) {
    CFIndex numberOfPhoneNumbers = ABMultiValueGetCount(phoneNumbers);
    for (CFIndex i = 0; i < numberOfPhoneNumbers; i++) {
        CFStringRef label = ABMultiValueCopyLabelAtIndex(phoneNumbers, i);
        if (label) {
            if (CFEqual(label, kABWorkLabel)) {
                /* it's the user's work phone */
            } else if (CFEqual(label, kABHomeLabel)) {
                /* it's the user's home phone */
            } else if (...) {
                /* other specific cases of your choosing... */
            } else {
                /* it's some other label, such as a custom label */
            }
            CFRelease(label);
        }
    }
    CFRelease(phoneNumbers);
}
于 2012-12-27T00:17:04.550 回答