我无法在Swift 3中的响应中使用Alert

Sae*_*ahi 3 http-post ios uialertcontroller swift3

嗨,我正在使用post and get响应方法,它工作良好,但是有两个问题:1-当响应为get时,我无法使用警报; 2-在另一个变化的响应中,我无法获得api_token和Id

这是我用于发布的代码**我使用的是本地代码,但是您可以更改网址并对此进行测试**

 var request = URLRequest(url: URL(string: "http://172.16.15.137:8888/TheoryTipo/public/api/register")!)
                     request.httpMethod = "POST"
                     let postString = "name=\(usernameforsignup.text!)&email=\(emailforsignup.text!)&password=\(passwordforsignup.text!)&tel=\(phonenumberforsignup.text!)"

                    print(postString)

                     request.httpBody = postString.data(using: .utf8)
                     let task = URLSession.shared.dataTask(with: request) { data, response, error in
                     guard let data = data, error == nil else {
                        // check for fundamental networking error
                     print("error=\(error)")

                        let alertController = UIAlertController(title: "Error", message: "can't Connect to the server", preferredStyle: UIAlertControllerStyle.alert)

                        let okAction = UIAlertAction(title: "retry", style: UIAlertActionStyle.default)
                        {
                            (result : UIAlertAction) -> Void in
                        }
                        alertController.addAction(okAction)
                        self.present(alertController, animated: true, completion: nil)
                        alertController.view.tintColor = UIColor.red
                        alertController.view.backgroundColor = UIColor.red
                        alertController.view.layer.cornerRadius = 0.1 * alertController.view.bounds.size.width

                     return
                     }

                     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
                     print("statusCode should be 200, but is \(httpStatus.statusCode)")
                     print("response = \(response)")
                     }

                     let responseString = String(data: data, encoding: .utf8)
                     print("responseString = \(responseString)")


                        print("OK")
                        let alertController = UIAlertController(title: "Complete", message: "Complete Sign Up" , preferredStyle: UIAlertControllerStyle.alert)


                        let okAction = UIAlertAction(title: "ok", style: UIAlertActionStyle.default)
                        {

                            (result : UIAlertAction) -> Void in

                        }
                            alertController.addAction(okAction)

                        self.present(alertController, animated: true, completion: nil)
                        alertController.view.tintColor = UIColor(red: 50/255, green: 118/255, blue: 43/255, alpha: 1.0)
                        alertController.view.backgroundColor = UIColor(red: 50/255, green: 118/255, blue: 43/255, alpha: 1.0)
                        alertController.view.layer.cornerRadius = 0.1 * alertController.view.bounds.size.width



                     }
                     task.resume()
Run Code Online (Sandbox Code Playgroud)

**请记住,第一个警报运行良好-该警报是应用程序无法连接到服务器的时间,但是问题是第二个警报,当用户完成文本字段并点击注册按钮时,应用程序将崩溃并重要的是,尽管该应用程序将崩溃,但信息仍会正确发送到服务器**

Nic*_*nov 5

您只需要在主线程上执行与UI相关的代码。

DispatchQueue.main.async { 

    // Alert Controller Code Here

}
Run Code Online (Sandbox Code Playgroud)