ios - 如果有链接的联系人,则无法从 Person ViewController 获取正确的数据

标签 ios abpersonviewcontroller

我与链接的联系人有联系。所以当我用 ABPersonViewController 显示这个联系人时,它有原始电子邮件和来自链接联系人的电子邮件。 enter image description here

当我选择链接的电子邮件 (John-appleseed@mac.com) 时,委托(delegate)方法调用:

- (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
    //get selected phone number
    ABMultiValueRef multi = ABRecordCopyValue(person, property);
    CFIndex index = ABMultiValueGetIndexForIdentifier(multi, identifier);
    NSString *selectedContactData = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(multi, index);

    return NO;
}

但在 selectedContactData 中,我收到的不是选定的电子邮件,而是第一封。 我只对组合联系人有这个问题。

是否有一种正确的方法可以从已连接联系人的联系人中选择电子邮件?

最佳答案

我能想象您描述的行为的唯一方法是,您可能在首次填充 displayedPerson 属性时在某些属性或 ivar 中引用 ABRecordRef ABPersonViewController。显然,在此代码片段中,您正确地使用了传递给此委托(delegate)方法的 person 属性,但也许您在与我们分享时简化了代码片段?当我在打开 shouldShowLinkedPeople 的情况下使用您的代码片段时,对于链接联系人的属性,它对我来说工作正常。

如果您确定使用错误的 ABRecordRef 变量没有问题,我能想到的唯一其他可能性是我在使用提供的默认联系人时遇到了奇怪的行为在模拟器上。我可能建议在具有真实链接联系人的实际设备上尝试此操作。

关于ios - 如果有链接的联系人,则无法从 Person ViewController 获取正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29237680/

相关文章:

ios - 是否可以使用 ABPersonViewController 从我的 iOS 应用更新链接的联系人?

objective-c - 无法使用 ABNewPersonViewController 在通讯录中显示

ios - 为什么我需要对字典中的字符串值进行字符串插值

ios - 如何使用标志禁用 Crashlytics iOS 库?

ios - Swift 3.0 和网络服务

Swift:将用户在 ABPersonViewController 中选择的信息复制到字典中

ios - 将zip写入cacheDirectory时,iOS NSData.write(toFile)返回false

ios - 使用 willDisplay cell 方法向上滚动 tableView 时,如何从 API 获取数据并更新单元格和部分?

iphone - 如何检查 ABNewPersonViewController 中的所有字段是否为空