我有一个包含用户名和密码的登录屏幕。我可以在关闭应用程序并再次打开后加载用户名和密码,但我必须单击登录按钮,而我希望它在证书正确时执行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()
}
})
}
}
答案 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