UISplitViewController вызывает viewWillDisappear(_:) перед загрузкой представления при запуске на iOS 11.2
У меня есть приложение с UISplitViewController в качестве начального контроллера, и оно имеет главный и подробный контроллеры представления (встроенные в UINavigationControllers) в качестве дочерних контроллеров представления, выложенные в Интерфейсном Разработчике. Для параметра splitDisplayMode контроллера разделенного представления установлено значение .primaryHidden.
Я только что обновился до Xcode 9.2, который использует iOS 11.2 в симуляторе. Когда я запускаю приложение на iPhone, на устройстве или в симуляторе, при запуске я вижу новое поведение: viewWillDisappear(_:) называется BEFORE viewDidLoad() в контроллере подробного представления. На этом этапе контроллер подробного представления еще не загружен - все его IBOutlets равны нулю. После этого вызова система загружает представление и вызывает viewDidLoad() как обычно.
Я обнаружил это, потому что метод viewWillDisappear(_:) получил доступ к UITextField, чтобы проверить, был ли он первым респондентом. В приведенном ниже коде текстовое поле подключено к UITextField через IBOutlet:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if textfield.isFirstResponder {
textfield.resignFirstResponder()
}
}
Поскольку представление еще не было загружено, текстовое поле было нулевым, и приложение вылетало. Это было легко исправить, добавив тест на ноль. Но в более ранних версиях Xcode и iOS сбой не происходил, потому что, я полагаю, viewWillDisappear(_:) не вызывался до загрузки представления.
Также интересно, что это не происходит с Xcode 9.2 под управлением iOS 11.2 на iPad, как на устройстве, так и на симуляторе. На iPad viewWillDisappear(_:) не вызывается при запуске на контроллере подробного представления.
Это похоже на ошибку: почему viewWillDisappear(_:) должен вызываться на контроллере подробного представления (или на любом контроллере представления) до того, как представление фактически будет загружено при запуске. Кто-нибудь еще наблюдает такое поведение с UISplitViewController на iPhone под управлением iOS 11.2? Или это следствие того, что я упустил из виду, хотя приложение работало без проблем в более ранних версиях?