1

私は3つのView Controllerを持っています:1)LoginViewController。2) メインビューコントローラー。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 では、LoginViewController へのアンワインド セグエを使用しました。つまり、ログアウト ボタンがあり、アンワインド セグエを使用して LoginViewController に移動しました。これは、アプリが LoginViewController からではなく MainViewController から開始された場合に正常に機能します。

ただし、ログアウトボタンが押されたときにLoginViewControllerまたはMainViewControllerから開始し、他のすべてのViewControllerをメモリから解放するときに、LoginViewControllerに移動したいと考えています。どうしてですか?

4

2 に答える 2

1

セグエを巻き戻すのではなく、ログアウト時に LoginViewController を rootViewController として設定する必要があります。

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 に答える