最近我从旧的ABAddressBook框架切换到新的CNContacts。在我的项目中,我使用自己的核心数据联系人从本地同步联系人。为此,我使用联系人标识符和电话标识符来同步电话号码。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
编辑:我测试了这个真实的手机
尝试多次这样做,但在真实的手机上。添加照片,然后保存,删除照片然后保存,再次添加照片,并确定它会改变 – MegaManX