Я пытаюсь использовать более современные CNContactPickerViewController
, чтобы выбрать контакт. Если контакт имеет несколько адресов, я хочу, чтобы пользователь мог выбрать только один из адресов. Если адрес специально выбран, я хочу также получить объект CNContact
.Как использовать CNContactPickerViewController для получения адреса и контакта?
Я мог бы сделать это, используя устаревшие ABPeoplePickerNavigationControllerDelegate
, где эта функция делегатом была доступна:
func peoplePickerNavigationController(_ peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier)
Однако при использовании CNContactPickerViewController
, только эта соответствующая функция Делегат доступна:
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)
Обратите внимание, что нет объекта CNContact
. Я получаю CNPostalAddress
в contactProperty, но я не получаю отчет о принадлежащем вам контакте.
Вот код, который я использовал с ABPeoplePickerNavigationController
:
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)
... и вот код с 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)
Итак, мне, похоже, те же функции, больше не доступный в новой структуре контактов, но я проверяю, не пропустил ли я что-то.
Моя ошибка рассматривала CNPostalAddress для свойства «контакт». Вместо того, чтобы смотреть на contactProperty. – Daniel