gpt4 book ai didi

ios - CNContacts 框架可能存在电话标识符错误?

转载 作者:可可西里 更新时间:2023-11-01 03:31:31 27 4
gpt4 key购买 nike

最近我从旧的 ABAddressBook 框架切换到新的 CNContacts。在我的项目中,我将本地联系人与我自己的核心数据联系人同步。为此,我使用联系人标识符和电话标识符来同步电话号码。

但我观察到有趣的事情,当我尝试编辑联系人时,我调用了这行代码

func getContact() -> CNContact? {
let contactStore = CNContactStore()
guard let contactRecord = try? contactStore.unifiedContact(withIdentifier: "8222B6F1-DE99-4099-82A4-47EAB9206A94:ABPerson", keysToFetch: [CNContactViewController.descriptorForRequiredKeys()]) else {
return nil
}
return contactRecord
}

@IBAction func showContact() {

let contactViewController = CNContactViewController(forNewContact: self.getContact())
contactViewController.delegate = self
contactViewController.title = "New Contact"

let navigationController = UINavigationController(rootViewController: contactViewController)
navigationController.navigationBar.isTranslucent = false
self.present(navigationController, animated: true, completion: nil)
}

func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
let newContact = self.getContact()
viewController.dismiss(animated: false, completion: nil)
}

其实很简单。但是如果我在 CNContactViewController 中编辑用户照片,电话标识符将会改变,即使我没有在这个 Controller 中编辑电话号码。电话标识符可以像这样轻松打印:

po newContact?.phoneNumbers.first?.identifier

这真的搞砸了我的同步,因为用户可能只会更改照片,但电话号码的标识符会更改,我无法知道发生了什么。如果我编辑一些其他数据,如人名、公司等,这个标识符不会改变......即使我将电话编辑为其他值,它也会保持不变。但由于某种原因,更改照片会完全弄乱它。

还有其他人观察到这个吗?

这是测试此示例项目的链接 https://drive.google.com/file/d/0B9ngBRq15jSuZTBYNVJCaVJ5WGc/view?usp=sharing

编辑:我在真手机上测试过

最佳答案

我在 iPhone 8 模拟器上尝试了您的示例项目,但似乎无法重现该问题。这是我设置初始联系人照片后的输出:

(lldb) po newContact?.phoneNumbers.first?.identifier
▿ Optional<String>
- some : "E5D4EDC2-B6FC-4E86-9AF0-F6B78BAF41E5"

(lldb) po oldContact?.phoneNumbers.first?.identifier
▿ Optional<String>
- some : "E5D4EDC2-B6FC-4E86-9AF0-F6B78BAF41E5"

在我再次点击按钮并将另一张照片设置为联系人照片后:

(lldb) po oldContact?.phoneNumbers.first?.identifier
▿ Optional<String>
- some : "E5D4EDC2-B6FC-4E86-9AF0-F6B78BAF41E5"

(lldb) po newContact?.phoneNumbers.first?.identifier
▿ Optional<String>
- some : "E5D4EDC2-B6FC-4E86-9AF0-F6B78BAF41E5"

在我看来,这些都一样。我对您的项目所做的唯一一件事就是将 getContact() 中的查找更改为我自己的联系人数据库中存在的标识符。

关于ios - CNContacts 框架可能存在电话标识符错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46489789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com