Ich versuche, die modernere CNContactPickerViewController
zu verwenden, um einen Kontakt auszuwählen. Wenn der Kontakt mehrere Adressen hat, möchte ich, dass der Benutzer nur eine der Adressen auswählen kann. Wenn eine Adresse speziell ausgewählt ist, möchte ich auch das Objekt erhalten.Wie verwende ich CNContactPickerViewController, um Adresse und Kontakt zu erhalten?
ich dies tun könnte die veralteten ABPeoplePickerNavigationControllerDelegate
verwenden, wo diese Delegatfunktion verfügbar war:
func peoplePickerNavigationController(_ peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier)
Wenn jedoch CNContactPickerViewController
Verwendung nur diese relevante Delegatfunktion steht zur Verfügung:
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)
Beachten Sie, dass Es gibt kein CNContact
Objekt zurückgegeben. Ich bekomme die CNPostalAddress
in der contactProperty, aber ich erhalte den Datensatz des besitzenden Kontakts nicht.
Hier ist der Code, den ich mit ABPeoplePickerNavigationController
verwendet:
let peoplePicker = ABPeoplePickerNavigationController()
peoplePicker.peoplePickerDelegate = self
peoplePicker.displayedProperties = [NSNumber(value: kABPersonAddressProperty as Int32), NSNumber(value: kABPersonBirthdayProperty as Int32)]
peoplePicker.predicateForSelectionOfPerson = NSPredicate(format: "[email protected] <= 1")
peoplePicker.modalPresentationStyle = UIModalPresentationStyle.currentContext
self.present(peoplePicker, animated: true, completion: nil)
... und hier ist der Code mit CNContactPickerViewController:
let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.displayedPropertyKeys = [CNContactPostalAddressesKey, CNContactBirthdayKey]
contactPicker.predicateForSelectionOfContact = NSPredicate(format: "[email protected] <= 1")
contactPicker.modalPresentationStyle = UIModalPresentationStyle.currentContext
self.present(contactPicker, animated: true, completion: nil)
Also, für mich, es wie die gleiche Funktionalität aussieht, ist nicht mehr verfügbar im neueren Contacts Framework, aber ich überprüfe hier, ob ich etwas verpasst habe.
Mein Fehler war die CNPostalAddress für eine "Kontakt" -Eigenschaft. Anstatt auf die contactProperty zu schauen. – Daniel