Возвращаясь к rootViewController, viewDidAppear вызывается перед viewDidLoad.

Мне нужно вернуться к моему rootViewController, когда приложение переместится с фона на передний план. Итак, в applicationWillEnterForeground я написал этот код:

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let mainController = storyboard.instantiateViewController(withIdentifier: "MqttLoginController")
        window?.rootViewController = mainController

Но я не понимаю, почему в моем rootViewController сначала вызывается viewDidAppear, затем viewDidLoad и, наконец, снова viewDidAppear. Почему это происходит?

ОБНОВЛЕНИЕ: Для уточнения я не писал, что не использую навигационный контроллер на начальных экранах приложения, и мне нужно вернуться к моему initialViewController. Так что на самом деле это не rootViewController всех экранов.


person Silvia    schedule 18.05.2020    source источник
comment
Попробуйте получить верхний контроллер в окне, а затем перейти к корневому контроллеру представления, используя его ref.   -  person Tushar Katyal    schedule 18.05.2020


Ответы (2)


ViewController уже присутствует как корень. Следовательно, когда ваше приложение выходит на передний план, оно запускает viewDidAppear, тогда вы создаете новый экземпляр ViewController, это запускает viewDidLoad и когда оно появляется viewDidAppear еще раз.

person Frankenstein    schedule 18.05.2020
comment
Я так и думал, но если я отлаживаю его, сначала появляется последний экран перед тем, как приложение переместится в фоновый режим (нет viewDidAppear моего начального ViewController). Затем идет мой код в applicationWillEnterForeground, затем viewDidAppear, viewDidLoad, viewDidAppear из initialViewController. - person Silvia; 21.05.2020

Вместо создания нового экземпляра попробуйте использовать этот код

 if let root =  window?.rootViewController {
        root.navigationController?.popToRootViewController(animated: true)
     }
person Jawad Ali    schedule 18.05.2020
comment
Я обновил свой вопрос, к сожалению, желаемый экран, к которому я хочу вернуться, - это не rootViewController всех представлений, а начальный ViewController. - person Silvia; 21.05.2020