我在AppDelegate中使用此代码,在某些情况下,它会打开登录屏幕或启动画面。如下所示
if (mobile != nil && keepMe == true) { // skip login
let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: "SplashController") as UIViewController
self.window?.rootViewController = initialViewControlleripad
self.window?.makeKeyAndVisible()
}
else {// Show login
let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: "LoginScreen") as UIViewController
self.window?.rootViewController = initialViewControlleripad
self.window?.makeKeyAndVisible()
print("Login!")
}
首先打开启动画面:从启动画面进入主菜单画面
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc = self.view.window?.rootViewController
let ViewController = storyBoard.instantiateViewController(withIdentifier: "toMenu")
vc?.present(ViewController, animated:true, completion:nil)
它被打开了。 但是,当从app委托它首先打开登录屏幕并从登录屏幕点击按钮时,它会移动到启动,然后到主菜单,它会一直发出此警告,
Warning: Attempt to present <SWRevealViewController: 0x7faac8839000> on <AppPhaseOne.Splash: 0x7faac7529530> whose view is not in the window hierarchy!
登录屏幕代码:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let ViewController = storyBoard.instantiateViewController(withIdentifier: "SplashController")
self.present(ViewController, animated:true, completion:nil)
所以viewControllers的构造是这样的:
app delegate: Splash -> mainMenu (working fine)
app delegate: Loign -> Splash -> mainMenu (giving the warning)
我知道有很多解决方案可以解决这个问题,我已经尝试了很多可用的解决方案,但都没有。