Существует три инициализатора для создания контроллера CNContactViewController:
- Существующий контакт:
init(for:)
- Новый контакт:
init(forNewContact:)
- Неизвестный контакт:
init(forUnknownContact:)
Первая и третья формы вызывают метод делегата contactViewController(_:shouldPerformDefaultActionFor:)
.Второй формы нет.Это тот, который вы используете.
Со вторым вариантом, единственное событие, которое вы получаете, это contactViewController(_:didCompleteWith:)
, и в этот момент новый контакт уже был сохранен в базе данных.
При редактировании нового контакта функция contactViewController (_ viewController: CNContactViewController, shouldPerformDefaultActionFor: CNContactProperty) должна вызываться
Нет, это не так.Это просто идея, которую вы придумали.
Ожидаемое поведение: «йо» печатается каждый раз, когда вы редактируете / выбираете свойство.
Затем перестаньте ожидать этого.
Как вы получаете уведомление, когда пользователь редактирует / выбирает свойство контакта?
Нет.
Когда вы используете каркас, такой как Cocoa,Вы не можете оправдать ожидания, которые вам нравятся.Ваши ожидания должны основываться на том, что на самом деле делает фреймворк.Вы могли бы пожелать , чтобы CNContactViewController и его сообщения делегата работали так, как вы описали, и это могло бы сделать очень хороший запрос на улучшение для Apple.Но на самом деле это не то, как это работает , поэтому ожидание того, что это так, не принесет вам никакой пользы.