2017-02-24 83 views
1

运行我的应用程序,并试图注册一个用户后,出现以下错误:SWIFT:错误EXC_BAD_INSTRUCTION

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_l386_INVOP,s subcode=0x0)

这出现在代码的末尾:

} as! (Data?, URLResponse?, Error?) -> Void)

let myUrl = NSURL(string: "http://127.0.0.1/MySQL_PHP/userRegister.php") 
     var request = URLRequest(url: myUrl as! URL) 
     request.httpMethod = "POST" 
     // let config = URLSessionConfiguration.default 
     let session = URLSession.shared 

     let postString = "email=\(userEmail)&passwort=\(userPasswort)&vorname=\(userVorname)&nachname=\(userName)&benutzer=\(userBenutzer)" 
     request.httpBody = postString.data(using: String.Encoding.utf8) 



     let task = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in 
      if error != nil { 
       print("error=\(error)") 
       return 
      } 



      var err: NSError? 
      var json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary 

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

       var isUserRegistered: Bool = false 
       if (resultValue == "Success") { 
        isUserRegistered = true 
       } 

       var messageToDisplay: String = parseJSON["message"] as! String! 
       if (!isUserRegistered){ 
        messageToDisplay = parseJSON["message"] as! String! 
       } 
       DispatchQueue.main.async(execute: { 

        var myAlert = UIAlertController(title:"Alert", message: messageToDisplay, preferredStyle: UIAlertControllerStyle.alert) 

        let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.default){ 
         action in 
         self.dismiss(animated: true, completion: nil) 
        } 
        myAlert.addAction(okAction) 
        self.present(myAlert, animated: true, completion: nil) 

       }) 
      } 
     } as! (Data?, URLResponse?, Error?) -> Void) 

     task.resume() 
+0

控制台/调试器的错误信息? – Larme

+0

不,没什么。就在EXC_BAD_INSTRUCTION –

+0

我不明白你为什么投那里开始。只要删除它。 – Hamish

回答

2

错误是误导。它与数据任务关闭没有直接关系。

首先根本就不

let task = session.dataTask(with: request, completionHandler: { (data, response, error) in 

... 

}) 

甚至更​​短投用后关闭语法:

let task = session.dataTask(with: request) { (data, response, error) in 

... 

} 

,因为do - catch块丢失各地try JSONSerialization

出现的错误

的错误消失或者通过添加do - catch块或使用try!

最后一个建议:请,请不要在Swift中使用NSArray/NSDictionary。你正在与坚强型体系战斗。

相关问题