Отправить объект Core Data для публикации API Alamofire multipartFormData - PullRequest
0 голосов
/ 21 февраля 2019

В моем приложении есть экран, в котором я получаю некоторые поля и сохраняю свой объект Order.Этот объект является моим основным объектом данных.После сохранения мне нужно отправить его на мой бэкэнд через Alamofire POST multipartFormData.Проблема в том, что это базовый объект данных (не кодируемый), и мне нужно отправить тип данных в multipartFormData.Как я могу преобразовать мой объект в данные?Есть ли другой способ сделать это?

Что я сделал:

let order = Order(context: DatabaseController.getContext())
order.orderItem = orderItem
order.product = product
order.value = value
order.date = date

Часть Alamofire:

Alamofire.upload (
            multipartFormData: { multipartFormData in

                multipartFormData.append(order, withName: "order")
            },
            to: url,
            headers: headers,
            encodingCompletion: { encodingResult in

Проблема в том, как поставить мой объект.внутри multipartFormData?Может ли кто-нибудь помочь мне, пожалуйста?

Обновлено:

Хорошо, отправка всего объекта не работает, мой API не принял, поэтому я сделал конкретный JSONтолько с необходимыми полями и повернул его тип данных: (PS: файлы имеют тип данных из изображений, выбранных пользователем, даже из камеры или галереи)

var files = Dictionary<Data, String>()
var jsonFiles = [[String: String]]()
var jsonOrder = [String: Any]()

for file in files {
    let dict : [String: String] = [ "orderImageIdLocal": uuidOrderImageIdLocal,
                                    "orderItemAnalysisIdLocal": uuidAnalysisIdLocal,
                                    "urlImageLocal": "\(imageId).jpg"]
    jsonFiles.append(dict)
}
jsonOrder = [ "reason": "\(textViewReason)",
                          "orderImagess": jsonFiles,
                          "orderAnalysisId": "",
                          "orderIdLocal": "\(uuidAnaliseIdLocal)",
                          "orderId": "\(orderId ?? "")",
                          "typeSolicitation": "\(typeSolicitation)"]

Затем я преобразую его в тип данных, как вы сказали, иотправьте в Alamofire, как указано выше:

let orderData = try? JSONSerialization.data(withJSONObject: jsonOrder, options: .prettyPrinted) {

Моя проблема сейчас заключается в том, что мой api ожидает zip-файл с теми изображениями, которые пользователь взял с камеры или из галереи.Поэтому я пытаюсь использовать ZIPFoundation .Я все еще не знаю, как застегнуть это и послать.Должен ли я застегнуть каждое изображение как тип данных?Затем преобразуйте zip-файл в тип данных, чтобы я мог отправить через multipartFormData.append?

Я пытался: здесь и здесь

1 Ответ

0 голосов
/ 21 февраля 2019

Здесь код как расширение NSManagedObject, который создает словарь из имени атрибута.

extension NSManagedObject {
  func toData() -> Data? {
    let keys = Array(self.entity.attributesByName.keys)
    let dict = self.dictionaryWithValues(forKeys: keys)
    do {
        let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
        return jsonData
    }
    catch{}
    return nil
  }
}

Использование:

let jsonData = order.toData()
multipartFormData.append(jsonData, withName: "order")
...