Как всегда, правильное решение состоит в том, чтобы контроллер представления прослушивал соответствующее событие жизненного цикла вместо того, чтобы делегат приложения или представитель сцены пытался что-либо сказать контроллеру представления.
В делегате сцены удалитесоздание ViewController
и попытка вызвать showMessage
.
Затем обновите свой класс ViewController
. Добавьте следующее к viewDidLoad
:
NotificationCenter.default.addObserver(self, selector: #selector(didActivate), name: UIScene.didActivateNotification, object: nil)
Затем добавьте метод didActivate
:
func didActivate() {
showMessage("Test Message")
}
И затем добавьте deinit
:
deinit {
NotificationCenter.default.removeObserver(self)
}
Таким образом, только контроллер представления должен знать логику того, что ему нужно делать и когда.
Также обратите внимание, что если вы действительно хотите определить, когда сцена возвращается с фона (выходит на передний план), тогда используйтеwillEnterForegroundNotification
уведомление вместо didActivateNotification
.