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