无法使用ABPeoplePickerNavigationController获取用户选择的电话号码

时间:2014-02-16 03:39:38

标签: ios

用例非常简单。该应用程序将弹出iPhone的联系人列表,并希望获得所选的电话号码。使用ABPeoplePickerNavigationController。问题是当联系人有多个电话号码时,无论用户在联系人详细信息页面中选择哪个电话号码,它始终是最后返回的电话号码。

代码实际上很简单和常见。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:    (ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{    
    NSString *selectedNumber = nil;
    if (property == kABPersonPhoneProperty)
    {
        ABMultiValueRef numbers = ABRecordCopyValue(person, property);
        selectedNumber = (__bridge NSString *) ABMultiValueCopyValueAtIndex(numbers, ABMultiValueGetIndexForIdentifier(numbers, identifier));
    }
}

identifier应该是所选电话号码的标识符。但无论用户选择什么,identifier的值始终为0

我也尝试过另一种方式,

ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSInteger number = ABMultiValueGetCount(multiPhones);

但上述代码中number的值始终为1。使用此API只能检索一个电话号码。

我检查了iPhone的默认消息应用程序,它具有相同的行为。如果用户有多个电话号码,则始终使用最后一个。所以我认为这可能是iOS的限制。但是当使用消息应用程序时,如果我开始键入联系人号码,在建议的下拉列表中,联系人的所有电话号码实际上都列出了,这让我非常困惑。

当我使用iPhone模拟器测试时,它工作正常。但是一旦部署到iOS 7的真正iPhone 4S,它就无法运行。唯一的区别是iPhone模拟器版本是7.0.3,但我的iPhone使用7.0.4。

我确实需要一些有关此问题的指导。这个功能真的可行吗?

0 个答案:

没有答案