我有3个视图控制器: 1)LoginViewController。 2)MainViewController。 3)LogoutViewController。
我从LoginViewController登录时使用NSUserDefaults存储用户名。
然后在AppDelegate中我使用这个方法:
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let UserData = NSUserDefaults.standardUserDefaults()
if (UserData.stringForKey("Username") != nil) {
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("MainViewController") as! MainViewController
self.window?.rootViewController = initialViewController
} else {
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController
self.window?.rootViewController = initialViewController
}
因此,当NSUserDefaults中存储了用户名时,应用程序将跳转到主视图控制器并跳过应用程序启动时的第一个。
在LogoutViewController中的我使用unwind segue到LoginViewController,这意味着我有一个注销按钮,我使用unwind segue转到LoginViewController。当应用程序从LoginViewController启动而不是从MainViewController启动时,它可以正常工作。
但是,我希望在Logout Button Pressed时转到LoginViewController,无论它是从LoginViewController还是MainViewController启动,并从内存中释放所有其他ViewControllers。怎么会这样?
答案 0 :(得分:1)
您需要在注销时将LoginViewController设置为rootViewController,而不是展开segue。
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController
UIApplication.sharedApplication().keyWindow?.rootViewController = initialViewController
答案 1 :(得分:0)
在你的情况下,在启动应用程序时首先调用以视图为基础的LoginViewController。因此,当您注销时,您应该弹出到根视图控制器