如果在我注销

时间:2017-01-13 07:05:43

标签: swift uiviewcontroller swift3 uialertcontroller

这个项目是简单的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
}

0 个答案:

没有答案