视频加载ViewControllers:错误的ViewController的临时显示

时间:2016-05-17 05:38:55

标签: ios swift2 nsuserdefaults

我正在尝试为我的应用编写登录过程。我已将导航控制器嵌入HomeViewController并将其设置为初始ViewController。 如何修复它,以便当用户输入错误的凭据时,HomeViewController根本不会显示?

这就是它正在做的事情:

输入正确的凭据

显示LoginViewController - >用户输入凭据 - >显示HomeViewController

输入了错误的凭据

显示LoginViewController - >用户输入凭据 - >显示HomeViewController - >显示LoginViewController

Relationship between ViewControllers

LoginViewController的代码(查看最后一段代码)

func handlingAuthentication(notification: NSNotification) {

    let dict = notification.object as! NSDictionary

        if dict["error"]! as! Bool == true {

            let errorMessage = dict["message"] as! String

            //initialize Alert Controller
            let alertController = UIAlertController(title: "Authentication error", message: errorMessage, preferredStyle: .Alert)

            //Initialize Actions
            let okAction = UIAlertAction(title: "Ok", style: .Default){
                    (action) -> Void in
                    self.dismissViewControllerAnimated(true, completion: nil)
            }

            //Add Actions
            alertController.addAction(okAction)

            //Present Alert Controller
            self.presentViewController(alertController, animated: true, completion: nil)

         }

         else

         {
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIn")

                NSUserDefaults.standardUserDefaults().synchronize()

                self.dismissViewControllerAnimated(true, completion:nil)

         }

}

HomeViewController的代码

override func viewDidAppear(animated: Bool) {
    let isUserLoggedIn = NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn")
    if(!isUserLoggedIn){
        self.performSegueWithIdentifier("toLoginVC", sender: self)
    }
}

更新 我已经尝试将代码块放在ViewDidLoad中,但我仍然遇到同样的问题(实际上现在我已经被困在主页上了)

    override func viewDidLoad() {
    super.viewDidLoad()
    let isUserLoggedIn = NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn")
    if(!isUserLoggedIn){
        self.performSegueWithIdentifier("toLoginVC", sender: self)
    }
    usernameLabel.text = Data.sharedInstance.userName
    getTaskDetails()
    displayTask.dataSource = self
}

1 个答案:

答案 0 :(得分:0)

如果主视图控制决定并显示登录,您将不可避免地在屏幕上看到它,因为它已经在显示过程中 - 所以它不应该这样做。你应该有一些其他控制器,也许是一个启动视图控制器,它决定显示登录或主视图。

在您的登录视图控制器中,警报OK按钮调用dismiss,这是登录控制器消失并再次重新出现的原因(在显示主控制器一小段时间后)。