加载用户信息后如何让程序执行segue?

时间:2015-11-05 07:08:07

标签: ios swift nsuserdefaults

我有一个包含用户名和密码的登录屏幕。我可以在关闭应用程序并再次打开后加载用户名和密码,但我必须单击登录按钮,而我希望它在证书正确时执行segue。我正在使用NSUserDefault来记住凭据。以下是我的代码。

override func viewDidLoad() {
    super.viewDidLoad()

    if let usernameIsNotNill = defaults.objectForKey("username") as? String {
        self.usernameField.text = defaults.objectForKey("username") as? String
    }

    if let passwordIsNotNill = defaults.objectForKey("password") as? String {
        self.passwordField.text = defaults.objectForKey("password") as? String
    }


    // Do any additional setup after loading the view.
}
 @IBAction func loginAction(sender: AnyObject) {

    let username = self.usernameField.text
    let password = self.passwordField.text


    if(username!.utf16.count) < 4 || (password!.utf16.count < 5){

    let alert = UIAlertView(title: "Invalid", message: "Username must be greater then 4 and Password must be greater then 5", delegate: self, cancelButtonTitle: "OK")
    alert.show()

    }else{

        self.actInd.startAnimating()

        PFUser.logInWithUsernameInBackground(username!, password: password!, block: { (user, error) -> Void in

            self.actInd.stopAnimating()

            if ((user) != nil) {

                //var alert = UIAlertView(title: "Success", message: "Logged In", delegate: self, cancelButtonTitle: "OK")
                //alert.show()
                var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
                defaults.setObject(self.usernameField.text, forKey: "username")
                defaults.setObject(self.passwordField.text, forKey: "password")
                defaults.synchronize()


                dispatch_async(dispatch_get_main_queue(),{

                    self.performSegueWithIdentifier("login", sender: self)


                })

            }else {

                let alert = UIAlertView(title: "Error", message: "\(error)", delegate: self, cancelButtonTitle: "OK")
                alert.show()

            }



        })

    }


}

3 个答案:

答案 0 :(得分:1)

您应该 不将用户密码以标准用户默认值存储为纯文本。 如果您没有编写需要网络的应用程序访问,然后没有必要让他们真正登录,因此你不需要实现这一点。如果用户需要您的应用程序的帐户,我建议通过Parse等后端实现一个帐户,这将比您更安全地处理密码。

答案 1 :(得分:0)

override func viewDidAppear() {}

当视图在屏幕上时,此功能将执行。因此,在此方法中,请检查NSUserDefaults中的凭据。如果有一些信息,那么

self.actInd.startAnimating()

    PFUser.logInWithUsernameInBackground(username!, password: password!, block: { (user, error) -> Void in

        self.actInd.stopAnimating()

        if ((user) != nil) {

            //var alert = UIAlertView(title: "Success", message: "Logged In", delegate: self, cancelButtonTitle: "OK")
            //alert.show()




            dispatch_async(dispatch_get_main_queue(),{

                self.performSegueWithIdentifier("login", sender: self)


            })

        }else {

            let alert = UIAlertView(title: "Error", message: "\(error)", delegate: self, cancelButtonTitle: "OK")
            alert.show()

        }



    })

但是用户名和密码变量应该来自NSUserDefaults

答案 2 :(得分:0)

Fisrt,检查是否存储了用户ID和密码。

如果它们存储在设备中,请检查并推送下一个viewcontroller。

例如,

--executor-cores X