Alamofire sending a request to an API 'NSInvalidArgumentException'

*爱你&永不变心* 提交于 2019-12-24 21:33:33

问题


i am using this code to send an image and text to an api:

    func uploadImageAndData(_ url:String,parameters1:Parameters,headers1:HTTPHeaders,images:[UIImage]){
        Alamofire.upload(multipartFormData: { multipartFormData in
            // import image to request
            var i=0
            for imageData in images {
//                multipartFormData.append(self.resizeImage(image: uploadedProfileImage, targetSize: CGSize(width: 200, height: 200)
                multipartFormData.append(imageData.pngData()!, withName: "profilePic", fileName: "profileimage"+".jpeg", mimeType: "image/jpeg")
                i += 1
            }
            for (key, value) in parameters1 {
                multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
            }
        } ,to: url,method:.post,
           headers:[:],

           encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.uploadProgress(closure: { (Progress) in
                    print("showuing upload progress")
                    print("Upload Progress: \(Progress.fractionCompleted)")
                    //SwiftSpinner.show(progress: Progress.fractionCompleted*100, title: "تحميل")
                })
                upload.responseJSON { response in

                    print(response.response?.statusCode as Any)

                    if let data = response.result.value, let utf8Text = String(data: data as! Data, encoding: .utf8) {
                        print("New Func Data: \(utf8Text)")
                    }
                    switch response.response?.statusCode {
                    case 201 :
                        print("Success")
                        break
                    case 413 :
                        print("Post too large")
                        break
                    case 200 :
                        print("200")
                        break
                    case 400 :
                        print("400")
                        break
                    case 401 :
                        print("401")
                        break
                    case 302 :
                        print("302")
                        break
                    case 500 :
                        print("500")
                        break
                    default: break
                    }
                }
                return
            case .failure(let encodingError): break

            }
        })
    }

and i got these datas :

let address: Parameters = [
          "location" : addressField.text!,
          "locationLat" :pickedLocationLat,
          "locationLong" :pickedLocationLong
     ]                           

  let body: Parameters = [
          "name": "Sample Name",
          "email": "test@test.com",
          "password": "test123",
         "address": address
    ]

and i am accessing the function using this code

var head = [String:Any]()
head["Accept"]="application/json"


uploadImageAndData(BASE_URL", parameters1: body, headers1: head as! HTTPHeaders, images: [uploadedProfileImage])

this code is throwing an error like

Terminating app due to uncaught exception 'NSInvalidArgumentException'
reason: '-[_TtGCs26_SwiftDeferredNSDictionarySSP__$ dataUsingEncoding:]: unrecognized selector sent to instance 0x6000015bed00'
terminating with uncaught exception of type NSException

i dont know what is causing this problem the api requires a json body with a content-type of application/json i tired removing all the content of the body parameter except for the name to try and send only the name and when i do that the image uploads successfully but it still gives me this error,so please help me figure out this problem.


回答1:


You need to make values a string not double

let address: Parameters = [
      "location" : addressField.text!,
      "locationLat" :"\(pickedLocationLat)",
      "locationLong" :"\(pickedLocationLong)"
]


来源:https://stackoverflow.com/questions/57521590/alamofire-sending-a-request-to-an-api-nsinvalidargumentexception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!