3

Hi I am using post and get response method and its work well but there are two problems : 1- I can't use alert when response is get and 2 - I can't get api_token and Id in the response to the another variation

here is the code that I used for post **I am using local but you can change the url and test this **

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

**Remember That the first Alert Working well - this Alert is for times that the app can't connect to the server But the problem is the second Alert and when the user completed the text field and tap sign up button the app will crash and the Important thing is that despite the app will crash but the informations will send to the server correctly **

Saeed Rahmatolahi
  • 1,317
  • 2
  • 27
  • 60

1 Answers1

6

You need to execute UI related code only on the main thread.

DispatchQueue.main.async { 

    // Alert Controller Code Here

}
Nick Marinov
  • 128
  • 1
  • 10
  • 1
    thanks for the answer of the first one its working well but for the second question what should I do? – Saeed Rahmatolahi May 21 '17 at 05:27
  • I don't know if I get the problem right, but.. You need to use the data, not the response. If the data comes to you in JSON form, you need to use JSONSerialization. Look at the answer of this question: http://stackoverflow.com/questions/39423367/correctly-parsing-json-in-swift-3 – Nick Marinov May 21 '17 at 05:33