我试图让用户可以从他们的联系人中选择一个电话号码,然后在UITextField中显示所选的号码。
问题是,无论您在联系人中选择哪个号码,从ABMultiValueIdentifier
返回的shouldContinueAfterSelectingPerson
始终为0。
这是我的代码:
- (IBAction)btnChooseContactClicked:(id)sender {
[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[picker setDisplayedProperties: [NSArray arrayWithObjects: [NSNumber numberWithInt: kABPersonPhoneProperty], nil]];
picker.peoplePickerDelegate = self;
[self presentModalViewController:picker animated:YES];
}
- (void)peoplePickerNavigationControllerDidCancel:
(ABPeoplePickerNavigationController *)peoplePicker
{
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person {
return YES;
}
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier //Always = 0
{
[self displayPerson:person property:property identifier:identifier];
[self dismissModalViewControllerAnimated:YES];
return NO;
}
- (void)displayPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSLog(name);
if (property == kABPersonPhoneProperty) {
ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty);
for(CFIndex i = 0; i < ABMultiValueGetCount(multiPhones); i++) {
if(identifier == ABMultiValueGetIdentifierAtIndex (multiPhones, i)) {
CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i);
CFRelease(multiPhones);
NSString *phoneNumber = (__bridge NSString *) phoneNumberRef;
CFRelease(phoneNumberRef);
self.txtTelNo.text = phoneNumber;
}
}
}
}
感觉就像我正在做的一切正确,我跟随了无数其他人似乎没有任何工作。 可能是什么问题?
答案 0 :(得分:0)
在iOS8中,可以选择在不首先进行身份验证的情况下使用ABPeoplePickerViewController。如果您这样做,那么您只能访问用户选择的值的数据 - 所有其他ID都设置为无效。
在打开ABPeoplePickerViewController之前先尝试进行身份验证,然后检查是否收到了正确的数据。
我在尝试检索被挑选人的缩略图时遇到了同样的问题 - 未经过身份验证,这始终是空的。
答案 1 :(得分:0)
事实证明,我手机中的测试用户是问题所在。 该用户有2个电话号码,两者都设置为“移动”类型。如果是这种情况,似乎选择器看不到它们之间的区别。谁能证实这一点,还是我在这里说出我的屁股?