CNContactPickerViewController, когда у контакта есть несколько писем

Я использую CNContactPickerViewController, чтобы позволить пользователю выбрать адрес электронной почты одного из его / ее контактов

let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count > 0")
contactPicker.displayedPropertyKeys = [CNContactNicknameKey, CNContactEmailAddressesKey]

Когда у контакта только одна почта, все идет хорошо

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {

    if let _mail = contact.emailAddresses.first?.value as String? {
        self.personWasSelected(with: _mail)
    }
}

Но иногда один из контактов имеет более одного письма, как я могу позволить пользователю выбрать один из них?

2 ответа

Чтобы позволить пользователю выбрать, какой адрес электронной почты выбрать, установите

picker.predicateForEnablingContact = NSPredicate(format: "emailAddresses.@count > 0")
picker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count == 1")

Таким образом, для пользователей только с одним электронным письмом

contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact)

вызывается, но для пользователей с более чем одним электронным письмом контактная информация представляется, и выбранное электронное письмо передается

contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)

Обратите внимание, что CNContactProperty также имеет .contact приписывать.

Хорошо, нашел решение методом проб-ошибок...

Я реализовывал оба:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    if let _mail = contactProperty.value as? String {
        self.personWasSelected(with: _mail)
    }
}

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {

    if let _mail = contact.emailAddresses.first?.value as String? {
        self.personWasSelected(with: _mail)
    }
}

Но только первый должен был быть реализован

Другие вопросы по тегам