Ostatnio przełączyłem się ze starego schematu ABAddressBook na nowe CNContakty. W moim projekcie synchronizuję kontakty z natywnych z moimi własnymi danymi kontaktowymi. Do tego celu używam identyfikatora kontaktu i identyfikatora telefonu do synchronizowania numerów telefonów.CNContacts możliwy błąd z identyfikatorem telefonu?
Ale obserwujemy ciekawą rzecz, gdy próbuję edytować kontakt, nazywam tego wiersza kodu
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)
}
To jest naprawdę proste. Ale jeśli w CNContactViewController edytuję zdjęcie użytkownika, identyfikatory telefonu się zmienią, mimo że nie edytowałem numerów telefonów w tym kontrolerze. Identyfikator telefonu można łatwo wydrukować tak:
po newContact?.phoneNumbers.first?.identifier
To naprawdę bałagan mój synchronizacji, ponieważ użytkownik może po prostu zmienić zdjęcie, ale identyfikatory dla numerów telefonów zmieni, a nie mam możliwości, by wiedzieć, co się stało . Ten identyfikator nie ulegnie zmianie, jeśli zmienię niektóre inne dane, takie jak nazwisko osoby, firma itp. Pozostanie ona taka sama, nawet jeśli zmienię telefon na inną wartość. Ale z jakiegoś powodu zmiana zdjęcia powoduje jej całkowite zniszczenie.
Czy ktoś inny to zaobserwował?
Oto Link do projektu próbki do testowania tej https://drive.google.com/file/d/0B9ngBRq15jSuZTBYNVJCaVJ5WGc/view?usp=sharing
EDIT: Przetestowałem to na prawdziwym telefonie
Spróbuj kilka razy to zrobić, ale na prawdziwym telefonie. Dodaj zdjęcie, a następnie zapisz, usuń zdjęcie, a następnie zapisz, jeszcze raz dodaj zdjęcie i na pewno się zmieni – MegaManX