2016-09-22 3 views
1

Я пытаюсь использовать более современные 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) 

Итак, мне, похоже, те же функции, больше не доступный в новой структуре контактов, но я проверяю, не пропустил ли я что-то.

+0

Моя ошибка рассматривала CNPostalAddress для свойства «контакт». Вместо того, чтобы смотреть на contactProperty. – Daniel

ответ

3

Обратите внимание, что нет CNContact Объект возвращен. Я получаю CNPostalAddress в contactProperty, но я не могу получить запись о зарегистрированном контакте .

Объект CNContact может быть получен из contact имущества CNContactProperty, так что ...

Однако при использовании CNContactPickerViewController, только эта соответствующей функции делегата предоставляется:

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

... реализация этого метода делегата позволит вам делать то, что y ou хотите. Но вы хотите, чтобы убедиться, что вы не реализации других методов делегата, такие как:

func contactPicker(CNContactPickerViewController, didSelect: CNContact) 

который уволит Picker момент выбран контакт (а не его собственность).

1

Обратите внимание, что нет CNContact объекта

Вы просто неправильно об этом. Метод делегата - contactPicker(_:didSelect:), он передает вам CNContactProperty, а CNContactProperty передает вам весь CNContact и все его свойства.

Смежные вопросы