Swift 如果在我注销后第二次弹出警报,SecondViewController将自动加载

Swift 如果在我注销后第二次弹出警报,SecondViewController将自动加载,swift,uiviewcontroller,swift3,uialertcontroller,Swift,Uiviewcontroller,Swift3,Uialertcontroller,这个项目是使用JSON数据进行简单的登录和注册,当我第一次在模拟器上构建项目并在加载视图时对其进行测试时,一切正常。 所有警报都正常工作。这是我的提醒功能 func createAlert(title: String, message: String) { let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert) alert

这个项目是使用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)
}
在我登录或注册后,将非常顺利地对第二视图控制器执行一个序列。但是当我注销并进入第一个屏幕时,如果我没有输入邮件文本或密码,就会出现一个警报(这很好),但当我按下
Got
后,第二个屏幕会再次出现,并显示最后输入的邮件id。这太令人震惊了。

我正在使用永久存储创建会话,下面是我创建会话和执行下一屏幕切换的代码

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)
})
我在第二个屏幕中的注销代码是(这里也执行了一个序列,返回登录和单选屏幕):

在我的第一个屏幕的查看显示方法中我正在检查用户以前是否登录(以下是代码):

我基本上认为是警报导致了这种情况的发生,因为每当弹出警报时,第二个屏幕就会显示以前的loggedIn用户

我还想提到,在注销后,我检查了weather
UserDefaults
是否为空(正如预期的那样,它为空)

当我在注销后尝试以及任何警报出现时(例如:对于空白文本字段),就会出现此错误。 多谢各位

更新

下面是我调用
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
}

从您调用创建警报函数的地方???@NikunjDamani我更新了我的问题以引起您的关注,谢谢您是否在注销时将会话设置为空,因为根据您在ViewDidDisplay中的代码,正在检查会话是否为空,它应该显示第二个控制器,这样可能会导致问题。@NikunjDamani我也这么认为,这就是为什么我试图将
existingSession
值打印到控制台,结果它是空的
[]
,甚至我在segue出现之前保留了断点,但它没有停在那里。
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)
    }
}
// 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
}