ios – CNContacts框架可能的错误与电话标识符?

ios – CNContacts框架可能的错误与电话标识符?,第1张

概述最近我从旧的ABAddressBook框架切换到新的CNContacts.在我的项目中,我将本机的联系人与我自己的核心数据联系人同步.为此,我使用联系人标识符和电话标识符来同步电话号码. 但我观察到有趣的事情,当我尝试编辑联系人时,我称这行代码 func getContact() -> CNContact? { let contactStore = CNContactStore() 最近我从旧的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中我编辑用户照片,电话标识符将会改变,即使我没有编辑该控制器中的电话号码.手机标识符可以像这样轻松打印:

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框架可能的错误与电话标识符?全部内容,希望文章能够帮你解决ios – CNContacts框架可能的错误与电话标识符?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1100446.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存