1

我有 3 个视图控制器:1) LoginViewController。2) 主视图控制器。3) 注销视图控制器。

当他从 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 启动时,这可以正常工作。

但是,我希望在按下注销按钮时转到 LoginViewController,无论它是从 LoginViewController 还是 MainViewController 开始,并从内存中释放所有其他 ViewController。怎么会这样?

4

2 回答 2

1

您需要在注销时将 LoginViewController 设置为 rootViewController 而不是展开 segue。

let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController
UIApplication.sharedApplication().keyWindow?.rootViewController = initialViewController
于 2016-05-14T09:12:03.147 回答
0

在您的情况下,在启动应用程序时首先调用作为根视图的 LoginViewController。所以当你注销时,你应该弹出到根视图控制器

于 2016-05-13T09:16:53.927 回答