Проблема при нажатии Post Method API в быстром - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь вызвать API, в котором я пытаюсь отправить некоторые параметры и массив изображений, но когда я нажимаю на API, я получаю ошибку, Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber dataUsingEncoding:]: unrecognized selector sent to instance 0xfb47bab3e1e91166'. Я проверил через точку останова, она падает на параметрах, я запутался, почему он выдает эту ошибку, мой код для API это,

func addAPI()
{
    let headers: HTTPHeaders = [
        /* "Authorization": "your_access_token",  in case you need authorization header */
        "Content-type": "multipart/form-data"
    ]


    let parameters :[String: Any]  = ["name":productNameTxt.text!,
                                      "price":priceTxt.text!,
                                      "size": sizeTxt.text!,
                                      "weight":weightTxt.text!,
                                      "quality":qualityTxt.text!,
                                      "brand":brandTxt.text!,
                                      "shippingCost":shippingCostTxt.text!,
                                      "details":detailTxt.text!,
                                      "material_id":materialId,
                                      "material_type_id": subMaterialId,
                                      "maxQuantity":4]


    Alamofire.upload(multipartFormData: { multipartFormData in

        for (key, value) in parameters {
            if let data = ((value) as AnyObject).data(using: String.Encoding.utf8.rawValue) {
                multipartFormData.append(data, withName: key)

            }
        }

        for (index, image) in self.imageArray.enumerated() {
            multipartFormData.append(image.pngData()!, withName: "file", fileName: "image\(index).png", mimeType: "image/png")
        }

// для i в 0 ..

    },
                     to: addProductUrl,method:HTTPMethod.post,
                     headers:headers, encodingCompletion: { encodingResult in
                        switch encodingResult {
                        case .success(let upload, _, _):
                            upload
                                .validate()
                                .responseJSON { response in
                                    switch response.result {
                                    case .success(let value):
                                      //  compBlock(value as AnyObject,true)
                                        print("responseObject: \(value)")
                                    case .failure(let responseError):
                                        print("responseError: \(responseError)")
                                    }
                            }
                        case .failure(let encodingError):
                            print("encodingError: \(encodingError)")
                            let errorDesc = (encodingError as NSError).localizedDescription
                            //failure(errorDesc as NSString,false)
                        }
    })

}

Для чего эта ошибка и как я могу ее устранить?

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Отсюда

if let data = ((value) as AnyObject).data(using: String.Encoding.utf8.rawValue) {

, тогда любое переданное значение должно быть преобразовано в Данные , и поскольку вы указываете целое число (NSNumber при переносе в json), следовательно, происходит сбой, поэтому измените 4 на "4" и

"material_id":"\(materialId)",
0 голосов
/ 29 мая 2019

Было бы лучше, если бы вы следовали так:

 //[String:String] instead of [String : Any]
 let parameters :[String: String]  = ["name":productNameTxt.text!,
                                  "price":priceTxt.text!,
                                  "size": sizeTxt.text!,
                                  "weight":weightTxt.text!,
                                  "quality":qualityTxt.text!,
                                  "brand":brandTxt.text!,
                                  "shippingCost":shippingCostTxt.text!,
                                  "details":detailTxt.text!,
                                  "material_id":"\(materialId)",
                                  "material_type_id": subMaterialId,
                                  "maxQuantity":4]


multipartFormData.append((value.data(using: .utf8))!, withName: key)
...