2015-11-05 41 views
0

我有一个用户名和密码登录屏幕。我现在可以在应用程序关闭并再次打开后加载用户名和密码,但我必须单击登录按钮,而不是我想要它执行segue,如果凭据是正确的。我正在使用NSUserDefault来记住凭据。以下是我的代码。如何让程序在加载用户信息后执行segue?

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() 

      } 



     }) 

    } 


} 
+1

确定什么问题你面对我的兄弟 –

+0

所以,当我打开应用程序,用户名和密码字段都充满了正确的凭据,但我必须点击登录按钮相反,我希望继续执行,而不是单击登录按钮。 – xxtmanxx

+0

描述什么不按预期工作,以便我们更好地了解您的问题。 – noobsmcgoobs

回答

1

你应该不会在标准用户默认为纯文本存储用户的密码。如果您没有编写需要Web访问的应用程序,那么确实无法登录它们是没有意义的,因此您不需要实现这一点。如果用户需要您的应用程序的帐户,我会建议通过后端实施一个如Parse,它会比您更愿意更安全地处理密码。

+0

我正在使用解析,任何建议与解析后端自动登录? – xxtmanxx

+0

那么如果你正在使用解析,绝对没有理由应该在'NSUserDefaults'中存储这些信息。你需要检查的是'if PFUser.currentUser()! != nil {self.performSegueWithIdentifier(“login”,animated:true)}' – pbush25

+0

这并没有回答OP在检查证书后执行segue的问题。 – noobsmcgoobs

0
override func viewDidAppear() {} 

该功能将在视图出现在屏幕上时执行。所以在这个方法中,检查NSUserDefaults中的凭据。如果那里有在那里的一些信息excecute这个

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的

0

最前一页,检查用户ID和密码存储。

如果他们存储在设备中,检查并推动下一个viewcontroller。

例如,

let userDefaults = NSUserDefaults.standardUserDefaults(); 
if let userDefaults.objectForKey("username"){ 
    if let userDefaults.objectForKey("password"){ 
     // do login process 
     // if user id and password are valid then 
     let nextViewController = YourViewController(); 
     self.presentViewController(nextViewController, animated: true, completion: nil); 
    } 
} 
// else alert some message and stay in loginViewController 
相关问题