Récemment, je suis passé de l'ancien framework ABAddressBook aux nouveaux CNContacts. Dans mon projet, je synchronise les contacts natifs avec mes propres contacts de données de base. Pour cela, j'utilise un identifiant de contact et des identifiants téléphoniques pour synchroniser les numéros de téléphone.CNCcontacts possible bug avec l'identifiant du téléphone?
Mais je l'ai observé chose intéressante, lorsque je tente de modifier le contact, j'appelle cette ligne de code
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)
}
Il est vraiment simple. Mais si dans CNContactViewController je modifie une photo d'utilisateur, les identifiants de téléphone changeront, même si je n'ai pas modifié les numéros de téléphone de ce contrôleur. L'identifiant de téléphone peut facilement être imprimé comme ceci:
po newContact?.phoneNumbers.first?.identifier
Cela a vraiment bousille ma synchronisation, étant donné que l'utilisateur sera peut-être juste changer la photo, mais des identifiants pour les numéros de téléphone va changer, et je n'aura aucun moyen de savoir ce qui est arrivé . Cet identifiant ne changera pas si je modifie d'autres données, comme le nom des personnes, la société, etc. Il restera le même même si je modifie le téléphone à une autre valeur. Mais pour une raison quelconque, le changement de la photo est complètement perturbé.
Est-ce que quelqu'un d'autre a observé cela?
Voici lien exemple de projet pour tester cette https://drive.google.com/file/d/0B9ngBRq15jSuZTBYNVJCaVJ5WGc/view?usp=sharing
EDIT: Je l'ai testé ce sur le téléphone réel
Essayez plusieurs fois de le faire, mais sur un vrai téléphone. Ajouter une photo, puis enregistrer, supprimer une photo puis enregistrer, encore ajouter une photo, et bien sûr il va changer – MegaManX