2

I am trying to connect back endless rest api using IOS swift 3. I am adding application id, secret key like below

request.addValue("0C896F8C-D3CE-BD08-FF1D-2B087CE77B00", forHTTPHeaderField: "application-id")
request.addValue("9D9A2BCD-F272-16E8-FF01-CD5AFD8CC300", forHTTPHeaderField: "secret-key")

And also I am getting

fatal error: unexpectedly found nil while unwrapping an Optional value

in this line of code

 let strData = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
            print("Body: \(strData)")

Can u anyone tell me whats going on…

let request = NSMutableURLRequest(url: NSURL(string:"/v1/users/login") as! URL)
        let session = URLSession.shared
        request.httpMethod = "POST"
        let params = ["name":"mm", "password":"mm"] as Dictionary<String, String>

        request.httpBody = try? JSONSerialization.data(withJSONObject: params, options: [])
        request.addValue("0C896F8C-D3CE-BD08-FF1D-2B087CE77B00", forHTTPHeaderField: "application-id")
        request.addValue("9D9A2BCD-F272-16E8-FF01-CD5AFD8CC300", forHTTPHeaderField: "secret-key")
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("REST", forHTTPHeaderField: "application-type")

        request.addValue("application/json", forHTTPHeaderField: "Accept")

       let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in
            print("Response: \(response)")
            let strData = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
            print("Body: \(strData)")

        let json = try! JSONSerialization.jsonObject(with: data!, options: .mutableLeaves)
        print(json)
        //JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary

            // Did the JSONObjectWithData constructor return an error? If so, log the error to the console
        if(error != nil) {
               // print(err!.localizedDescription)
                let jsonStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
                print("Error could not parse JSON: '\(jsonStr)'")
            }
            else {
                // The JSONObjectWithData constructor didn't return an error. But, we should still
                // check and make sure that json has a value using optional binding.
                if let parseJSON = json as? NSDictionary   {                   // Okay, the parsedJSON is here, let's get the value for 'uccess' out of it
                    let success = parseJSON["success"] as? Int
                    print("Succes: \(success)")
                }
                else
                {
                    // Woa, okay the json object was nil, something went worng. Maybe the server isn't running?
                    let jsonStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
                    print("Error could not parse JSON: \(jsonStr)")
                }
            }
        })

        task.resume()
CinCout
  • 8,291
  • 9
  • 47
  • 55
  • 1
    what do you get from response in the completion handler? data can easily be null in this case, e.g. if the request fails or returns an empty response – mlidal Dec 22 '16 at 07:58
  • 1
    I suggest using https://github.com/Alamofire/Alamofire rather than inventing bicycle – Sasha Kozachuk Dec 22 '16 at 08:44
  • Did you check the error to nil, before unwrapping data?.. seems there might some error came – Vinupriya Arivazhagan Dec 22 '16 at 08:47
  • I am getting Response like below: Response: Optional( { URL: https://api.backendless.com/v1/users/login } { status code: 400, headers { "Access-Control-Allow-Headers" = "Origin, application-id, application-type, Content-Type, secret-key, request, user-token";@mlidal – madhavi pandluri Dec 23 '16 at 04:07

1 Answers1

0

You need to check the data is not nil first:

if let d = data {
    let strData = NSString(data: d, encoding: String.Encoding.utf8.rawValue)
    print("Body: \(strData)")
} else {
    print(error)

}

Sean Lintern
  • 2,961
  • 17
  • 25