iOS: 身份验证请求后无法继续

iOS: Cannot segue after authentication request

我正在努力让 performSegue 与我的用户注册页面一起使用。当调用 createUser 方法时,我想创建一个用户,如果成功完成,我想显示一个警报,然后使用 signupToLogin segue 进入登录页面。

我知道 performSegue 必须从主线程调用,因为它涉及 UI 元素,我正在尝试为此使用 DispatchQueue.main.async。但是,只有我的警报出现。我的代码的 performSegue 部分未执行。我在 StackExchange () 上看到过类似的东西,但无法使用它们来让我的代码正常工作。有人可以帮我吗?

func createUser(emailID: String, password: String) {
    Auth.auth().createUser(withEmail: emailID, password: password){ (authResult, error) in
        guard let user = authResult?.user, error == nil else {
            print(error!.localizedDescription)
            self.displayOKAlert(title: "Error", message: "An error occurred. Could not sign up user.")
            return
        }
        DispatchQueue.main.async {
            self.displayOKAlert(title: "Success", message: "Successfully signed up user. Proceeding to login page.")
            self.performSegue(withIdentifier: "signupToLogin", sender: self)
        }
    }
}

问题正是因为您试图同时呈现和提醒并执行转场。两者都需要 UI 更改,并且视图控制器可能无法同时处理它们。 您可以做的是更改 displayOKAlert 函数,使其在显示警报时完成。像这样:

self.present(alert, animated: true, completion: completion) 

你的完成是这样的:

{
        DispatchQueue.main.async {
            self.performSegue(withIdentifier: "signupToLogin", sender: self)
        }
}

此外,您需要添加一个逻辑来在某个时候关闭您的警报,否则如果您的 segue 正在推送它,它将保留在您的下一个视图控制器之上。