地址簿检索移动,工作和iPhone电话号码

时间:2012-12-26 23:51:34

标签: iphone objective-c ios abpeoplepickerview

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

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

我知道如果我想找回某人的工作电子邮件,那就是:

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

对于家庭而言:

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

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

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

1 个答案:

答案 0 :(得分: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);
}