这个项目是简单的signIn和signUp,使用JSON数据,当我构建项目并在第一次加载视图时在模拟器上测试它时,一切都按预期工作。 所有警报都正常工作。这是我的提醒功能
func createAlert(title: String, message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Got It", style: .default, handler: { (action) in
self.dismiss(animated: true, completion: nil)
}))
self.present(alert, animated: true, completion: nil)
}
在我签名或签名后,非常顺利地对第二个视图控制器执行segue。但是当我退出并进入第一个屏幕时,如果我没有输入邮件或密码的文本,则会发出警报(这很棒)但是在我按下Got It
之后,第二个屏幕再次显示最后mail_id输入。这非常令人震惊。
我使用永久存储来创建会话,这是我创建会话和执行segue到下一个屏幕的代码
self.token = "\(authToken)"
self.name = ((jsonResult["user"] as? NSDictionary)?["email"] as? String)!
self.session.append(self.token)
self.session.append(self.name)
UserDefaults.standard.set(self.session, forKey: "Session")
DispatchQueue.main.sync(execute: {
self.performSegue(withIdentifier: "First Segue", sender: self)
})
我在第二个屏幕中的注销代码是(此处还执行了一个segue返回signIn和singUp屏幕):
let session = UserDefaults.standard.object(forKey: "Session")
if let quitSession = session as? [String]{
var array = quitSession
array.removeAll()
UserDefaults.standard.set(array, forKey: "Session")
}
在我的第一个屏幕的 viewDidAppear方法中,我检查用户之前是否已登录(以下是代码):
override func viewDidAppear(_ animated: Bool) {
let item = UserDefaults.standard.object(forKey: "Session")
let existingSession = (item as? [String])!
if existingSession.count > 0 {
let array = existingSession
name = array[1]
token = array[0]
performSegue(withIdentifier: "First Segue", sender: self)
}
}
我基本上认为警报会导致这种情况发生,因为只要警报弹出,第二个屏幕就会出现以前的登录用户。
我还想提一下,在登录后我检查天气UserDefaults
是否为空(并且正如预期的那样是空的)。
当我尝试logOut以及任何Alert出现时(例如:对于空白文本字段),此错误即将发生。 谢谢。
更新
以下是我调用createAlert()
方法的部分代码,因为此方法是出于各种目的而调用的。
// To check for Email and Password Fields are not empty
func ifTextFieldDatapresent() -> Bool {
var returnType = Bool()
if emailText.text == "" || passwordText.text == "" {
createAlert(title: "Alert !", message: "Please Enter Correct Email and Password")
returnType = false
} else{
returnType = true
}
return returnType
}