Xcode、swift:执行时出现 SIGABRT 错误

Xcode, swift: SIGABRT error on performsegue

我是 swift 的新手,我刚刚开始从事这个项目。这是 ios 的登录应用程序。这是 "Log In" 按钮的代码。 "Parola" 顺便说一句,意思是 "password"。

@IBAction func loginButton(_ sender: Any) {
    let Email = emailText.text;
    let Parola = parolaText.text;

    if((Email?.isEmpty)! || (Parola?.isEmpty)!){
        print("Empty field!")
    } else {

    let myUrl = NSURL(string: "http://my.url/webservice.php");
    let request = NSMutableURLRequest(url:myUrl! as URL);
    request.httpMethod = "POST";

    let postString = "email=\(String(describing: Email!))&password=\(String(describing: Parola!))";
    request.httpBody = postString.data(using: String.Encoding.utf8);


    let task = URLSession.shared.dataTask(with: request as URLRequest){
        data, response, error in

        if error != nil {
            print("error=\(String(describing: error))")
            return
        }

        var err: NSError?
        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary

            if let parseJSON = json {
                var resultValue:String = parseJSON["status"] as! String;
                print("result: \(resultValue)");

                if(resultValue == "Success"){
                    self.performSegue(withIdentifier: "LogPers", sender: nil)
                }
            }

        } catch let error as NSError {
            err = error
        }
    }

    task.resume()

}
} 

它通过使用网络服务连接到外部数据库来验证输入的用户信息。一切正常。

我的问题是应用程序尝试执行 segue 时出现 SIGABRT 错误。我试着在网上搜索这个问题,所有的消息来源都说这个错误是由有问题的插座和连接引起的,但我所有的插座都没有问题。

如果我在 "let task = URLSession.shared.dataTask(with: request as URLRequest){" 结构之外使用 segue,它可以在没有 SIGABRT 错误的情况下执行,但我需要它在内部,所以只有当用户输入正确时它才会转移到第二个视图。

我该如何解决这个问题?提前致谢。

请记住,我是 xcode 和 swift 的初学者,如果这是一个愚蠢的问题,我深表歉意。

崩溃是因为您试图在后台线程上执行 segue(因为 performSegue 调用在 URLSession 回调中)。任何在主线程上处理视图 needs 到 运行 的代码。

尝试将您的 performSegue 调用包装在 DispatchQueue 块中,如下所示:

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