Проблема при нажатии Post Method API в Swift

Я пытаюсь вызвать 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)
                        }
    })

}

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

попробуйте "maxQuantity":"4"

Ben Rockey 28.05.2019 15:12
((value) as AnyObject).data(using: String.Encoding.utf8.rawValue). Вы предполагаете, что все value могут вызывать метод .data(using:), который является методом String. Но у вас есть хотя бы "maxQuantity":4], и ясно, что «4» — это не строка. Это Int (и в Objective-C, чтобы его так называли, это NSNumber).
Larme 28.05.2019 15:12

у меня есть int и строка обоих значений в параметре, как я могу отправить их оба? @Ларме

Junaid Khan 28.05.2019 15:37

все та же проблема. @БенРокки

Junaid Khan 28.05.2019 15:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
150
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Отсюда

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

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

"material_id":"\(materialId)",

@JunaidKhan тоже material_id":materialId

Sh_Khan 28.05.2019 15:40

но я должен отправить materialId в типе данных int на серверную часть. @Sh_Khan

Junaid Khan 28.05.2019 15:41

вы не можете отправить это так, попробуйте и посмотрите

Sh_Khan 28.05.2019 15:42

Будет лучше, если вы выполните следующее:

 //[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)

Другие вопросы по теме