Xcode,swift:performssgue

时间:2017-12-07 16:48:38

标签: ios swift segue sigabrt

我是swift的新手,我刚刚开始研究这个项目。它是ios的登录应用程序。以下是"登录"的代码。按钮。 "帕罗拉"意思是密码"顺便说一句。

@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()

}
} 

它使用Web服务连接到外部数据库,以验证输入的用户信息。所有这一切都很好。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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