How can i fix “Error Domain=NSCocoaErrorDomain Cod

2019-02-13 13:08发布

问题:

When i run my code i get this error and i don't know why.

Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value.}

I looked for it on the internet but i didn't find something.

This is my code:

 let myUrl = NSURL(string: "http://foodhelper.club/registerUser.php");
    let request = NSMutableURLRequest(URL:myUrl!);
    request.HTTPMethod = "POST";

    let postString = "userEmail=\(userEmail!)&userFirstName=\(userFirstName!)&userLastName=\(userLastName!)&userPassword=\(userPassword!)";

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);

    NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in

        dispatch_async(dispatch_get_main_queue())
        {



            if error != nil {
                self.alertMessage(error!.localizedDescription)
                print("fail")
                return
            }

            do {
            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
                print ("1")
              if let parseJSON = json {

                    let userId = parseJSON["userId"] as? String
                    print ("2")
                    if( userId != nil)
                    {
                        let myAlert = UIAlertController(title: "Alert", message: "Registration successful", preferredStyle: UIAlertControllerStyle.Alert);

                        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){(action) in

                            self.navigationController?.popViewControllerAnimated(true)                            }

                        myAlert.addAction(okAction);
                        self.presentViewController(myAlert, animated: true, completion: nil)
                    } else {
                        let errorMessage = parseJSON["message"] as? String
                        print ("3")
                        if(errorMessage != nil)
                        {
                            self.alertMessage(errorMessage!)
                        }

                    }

                }
            } catch{

                //email vergleich fehlt, egal ob
                print(error)
                print("catched error")

                let myAlert = UIAlertController(title: "Alert", message: "Registration successful", preferredStyle: UIAlertControllerStyle.Alert);

                let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){(action) in


                    self.navigationController?.popViewControllerAnimated(true)
                }

                myAlert.addAction(okAction);
                self.presentViewController(myAlert, animated: true, completion: nil)


            }



        }

    }).resume()


}

Thank you for your help

回答1:

You need to set the content-type header value to use JSON.

request.addValue("application/json", forHTTPHeaderField: "Content-Type")

Updated the code to Swift 3 and removed everything unrelated to the request:

let myUrl = URL(string: "http://foodhelper.club/registerUser.php");
var request = URLRequest(url:myUrl!);
request.httpMethod = "POST";
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

let postString = "userEmail=email&userFirstName=firstname&userLastName=lastname&userPassword=password";
request.httpBody = postString.data(using: String.Encoding.utf8);

URLSession.shared.dataTask(with: request, completionHandler: { (data:Data?, response:URLResponse?, error:Error?) -> Void in
        if error != nil {
            print("fail")
            return
        }

        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
            print ("1")

            if let parseJSON = json {

                let userId = parseJSON["userId"] as? String
                print ("2")
                if( userId != nil) {

                } else {
                    let errorMessage = parseJSON["message"] as? String
                    print ("3")
                }
            }
        } catch{
            print(error)
        }
}).resume()