当应用程序从后台移动到前景时,我需要返回到rootViewController。因此,在applicationWillEnterForeground中,我编写了以下代码:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let mainController = storyboard.instantiateViewController(withIdentifier: "MqttLoginController")
window?.rootViewController = mainController
但是我不明白为什么在我的rootViewController中首先调用viewDidAppear,然后再调用viewDidLoad,最后再次调用viewDidAppear。为什么会这样呢?
更新:为澄清起见,我没有写过我在应用程序的初始屏幕中不使用导航控制器的信息,我需要回到我的initialViewController。因此,它并不是所有屏幕的rootViewController。
ViewController已经作为根存在。因此,当您的应用程序出现在前台时,它会触发viewDidAppear
,然后您将创建一个新的ViewController实例,这将触发viewDidLoad
,并在其再次出现viewDidAppear
时出现。
代替创建新实例,请尝试使用此代码
if let root = window?.rootViewController {
root.navigationController?.popToRootViewController(animated: true)
}