我注意到我们用来处理ABPeoplePickerNavigationController提供的联系人特定电子邮件选择的逻辑中的错误。当联系人从Twitter或Facebook链接联系人时,该错误就会发生。
我已经对几个相关的StackOverflow问题进行了双重检查,我似乎正在“正确地”做所有事情:
以下是点击按钮后加载ABPeoplePicker的代码:
- (void)setUpChooseContactButton
{
@weakify(self)
[self.chooseContactButton addEventHandler:^(id sender) {
@strongify(self)
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
picker.displayedProperties = @[@(kABPersonEmailProperty)];
picker.delegate = self;
[self presentViewController:picker animated:YES completion:nil];
} forControlEvents:UIControlEventTouchUpInside];
}
稍后,当用户点击所选联系人的电子邮件时,我们按如下方式处理:
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
{
if (property == kABPersonEmailProperty)
{
ABMultiValueRef multiEmail = ABRecordCopyValue(person, kABPersonEmailProperty);
CFIndex selectedIndex = ABMultiValueGetIndexForIdentifier(multiEmail, identifier);
CFStringRef selectedEmail = ABMultiValueCopyValueAtIndex(multiEmail, selectedIndex);
NSLog(@"Doing something with %@", selectedEmail);
if (selectedEmail) CFRelease(selectedEmail);
if (multiEmail) CFRelease(multiEmail);
}
[self dismissViewControllerAnimated:YES completion:nil];
return NO;
}
当联系人没有任何链接的联系人,例如,然而,Facebook在此处打印的电子邮件地址不会是用户选择的地址。
例如,我的联系人中有一位朋友,我们称之为 John Snow ,我们是好朋友,所以我在iCloud,2个不同的Gmail帐户和Facebook上与他联系
当我浏览John Snow的联系页面时,我看到以下5封电子邮件:
以及每个链接联系人的单元格。
因此,如果我点击 lordsnow@nightswatch.org(呈现电子邮件列表中的索引2)并在NSLog的shouldContinueAfterSelecting回调中设置断点并打印出相关变量,这就是我将要看到的:
(lldb) po multiEmail
ABMultiValueRef 0x17737ca0 with 8 value(s)
0: null (0x3b864a60) - john@winterfellstarks.com (0x15d4bd30)
1: null (0x3b864a60) - lordsnow@nightswatch.org (0x15f0f2d0)
2: null (0x3b864a60) - john.snow@gmail.com (0x15f3b470)
3: null (0x3b864a60) - jsnow@gmail.com (0x15d02060)
4: _$!<Work>!$_ (0x15f352d0) - john.snow@facebook.com (0x15f3d480)
5: _$!<Other>!$_ (0x15fbeae0) - john.snow@gmail.com (0x15f2a170)
6: _$!<Other>!$_ (0x15de9ce0) - jsnow@gmail.com (0x15f0f0e0)
7: _$!<Other>!$_ (0x15f0a110) - lordsnow@nightswatch.org (0x15f00830)
(lldb) po selectedIndex
2
(lldb) po identifier
2
(lldb) po selectedEmail
john.snow@gmail.com
我真的很感激这里的一些帮助。
答案 0 :(得分:0)
可悲的是,这不是你要找的答案。
我有这个问题,但有电话号码,而不是电子邮件。同样的问题。
我&#34;修复&#34;它通过禁用联系人(两个帐户--gmail和icloud),然后再次打开它们。一旦发生这种情况,并且他们有一点时间重新链接,它工作正常。
我认为这是一本损坏的地址簿,但当然没有证据:(