我是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的初学者,很抱歉,如果这是一个愚蠢的问题。
答案 0 :(得分:2)
崩溃是因为你试图在后台线程上执行segue(因为performSegue
调用是在URLSession回调中)。任何用于在主线程上运行视图needs的代码。
尝试将您的performSegue
调用包装在DispatchQueue块中,如下所示:
DispatchQueue.main.async {
self.performSegue(withIdentifier: "LogPers", sender: nil)
}