Lo siento si mi pregunta no está clara, voy a intentar aclararme con una explicación. Así que aquí es exactamente lo que estoy tratando de hacer, estoy tratando de utilizar Alamofire a publicar más de un comentario (Algo que mi aplicación se implementa y se almacena como un objeto JSON cada vez que el usuario escribe un nuevo comentario). Estoy pasando estos JSON comentarios a mi post de la rutina, donde puedo utilizar SwiftyJSON para extraer cada valor. Noe la cosa es que me sabe cómo establecer el parámetros si estoy tratando de autorizar el usuario de la siguiente manera,

    var parameters = [
    "userName": userName,
    "password": passwordSalt,
    "somethingElse": somethingElse
    ]
    var err: NSError?
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameters , options: nil, error: &err)

es muy sencillo hasta aquí, ahora viene mi problema. Estoy tratando de utilizar alamofire post a post múltiples objetos json, que debe este aspecto

[
   {
    "comment": "my First Comment",
    "commentDate": "2014-05-13 14:30 PM",
    "isSigned": 1,
    "patientId": 2,
    "documentId": 3
    },
   {
    "comment": "my SecondComment",
    "commentDate": "2014-05-14 14:30 PM",
    "isSigned": 2,
    "patientId": 3,
    "documentId": 4
    },
   {
    "comment": "my third Comment",
    "commentDate": "2014-05-15 14:30 PM",
    "isSigned": 3,
    "patientId": 4,
    "documentId": 5
    }
 ]

¿Cómo puedo crear por encima de matriz/json (no estoy exactamente seguro de por qué llamar a esta) por iteración objeto JSON? Sé cómo obtener el JSON valores del objeto JSON todo lo que estoy preguntando es cómo crear este parámetros variable para almacenar los datos, como los del ejemplo anterior. Es incluso posible hacer esto usando Alamofire? (POST varios objetos a la vez)

He intentado un par de maneras, pero que no funcionó

  1. var dictArray = [Dictionary<String, Any>]
    var dict = Dictionary<String, Any>

    Mientras que la iteración sobre un objeto JSON inserta cada valor en dict y anexa dict a dictArray, ahora, cuando estoy tratando de utilizar dictArray como parámetros .dataWithJSONObject no como el objeto.

  2. var dict = Dictionary<String, AnyObject>
    var array = NSArray()

    extrae cada valor de la iteración sobre el objeto JSON y las insertó en dict y trató de insertar dict en la matriz. Pero esto da un problema diferente. La forma en que se construye los objetos es diferente de lo que se requiere de la siguiente manera.

    [
       {
        comment: my First Comment,
        commentDate: 2015-05-13 13:30 PM"",
        isSigned: 1,
        patientId: 2,
        documentId: 3 
       },
       {
        comment: my Second Comment,
        commentDate: 2015-05-13 13:30 PM"",
        isSigned: 2,
        patientId: 5,
        documentId: 4 
       },
       {
        comment: my third Comment,
        commentDate: 2015-06-13 13:30 PM"",
        isSigned: 5,
        patientId: 1,
        documentId: 9 
       }
    ]

    Aquí el Claves no ser envueltas dentro de comillas (forma Correcta: «comentario», de manera equivocada: el comentario).

¿Alguien se trate de la publicación de varios objetos, es alamofire capaz de hacerlo? Espero que me hizo la pregunta clara. Lo siento si esto es demasiado simple de una pregunta a responder, yo me pasé todo el día pensando esto, pero no funcionó.

InformationsquelleAutor Sashi | 2015-04-28

3 Comentarios

  1. 5

    La correcta representación en Swift para la matriz de observación de los objetos que se han publicado, sería como este:

        let comments: Array<[String:AnyObject]> = [
            [
                "comment": "my First Comment",
                "commentDate": "2014-05-13 14:30 PM",
                "isSigned": 1,
                "patientId": 2,
                "documentId": 3
            ],
            [
                "comment": "my SecondComment",
                "commentDate": "2014-05-14 14:30 PM",
                "isSigned": 2,
                "patientId": 3,
                "documentId": 4
            ],
            [
                "comment": "my third Comment",
                "commentDate": "2014-05-15 14:30 PM",
                "isSigned": 3,
                "patientId": 4,
                "documentId": 5
            ]
        ]

    El envío de un único comentario sería bastante simple:

        let comment: [String:AnyObject] = [
            "comment": "my First Comment",
            "commentDate": "2014-05-13 14:30 PM",
            "isSigned": 1,
            "patientId": 2,
            "documentId": 3
        ]
    
        Alamofire.request(.POST, "http://httpbin.org/post", parameters: comment).responseJSON { (req, res, json, error) in
            println(req)
            println(res)
            println(json)
            println(error)
        }

    Sin embargo, con el fin de enviar una matriz de comentarios, me parece que tendría que generar la URLRequest de su auto y, a continuación, pasar a Alamofire de la siguiente manera:

        let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: "http://httpbin.org/post")!)
        mutableURLRequest.HTTPMethod = "POST"
        var error: NSError? = nil
    
        let options = NSJSONWritingOptions.allZeros
        if let data = NSJSONSerialization.dataWithJSONObject(comments, options: options, error: &error) {
            mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
            mutableURLRequest.HTTPBody = data
        }
    
        Alamofire.request(mutableURLRequest).responseJSON { (req, res, json, error) in
            println(req)
            println(res)
            println(json)
            println(error)
        }

    Si se puede modificar la API del servidor para que acepte un objeto de múltiples comentarios, usted también podría enviar a ellos de esta manera:

        Alamofire.request(.POST, "http://httpbin.org/post", parameters: ["comments": comments]).responseJSON { (req, res, json, error) in
            println(req)
            println(res)
            println(json)
            println(error)
        }

    Se refiere.

    • Yo estoy lejos de mi sistema ahora, voy a trabajar en ello cada vez que puedo y darte a conocer. Gracias por tu tiempo @Eneko 🙂
  2. 0

    Esto sería mejor

    Crear el diccionario y la matriz de var diccionario
    Luego de bucle de cómo muchos de los parámetros que usted necesita para enviar desde el origen de datos de una matriz o lo que sea.

    Aquí mi escenario

    Necesario responder a todas las preguntas (será un número aleatorio/tamaño)

    var ansParams = [[String: String]]()
    var paramz = [String: String]()
    
    
    for question in sectionQuestions{
        paramz = [
            AppConstants.PARAMETER.KEY_1    : "Value",
            AppConstants.PARAMETER.KEY_2    : "Value",
            AppConstants.PARAMETER.KEY_3    : "Value",
            AppConstants.PARAMETER.KEY_4    : "Value",
            AppConstants.PARAMETER.KEY_5    : "Value"
        ]
        ansParams.append(paramz)
    }
    
    
    print(ansParams)
    
    
    //Check All Paramz and its values then send ansParams as Parameter to POST request
  3. -2

    Tuve un problema similar en mi proyecto de trabajo, mientras que con una API que no permiten la publicación de varios objetos a la vez. El formato de la matriz como se señaló anteriormente está muy bien.

       let comments: Array<[String:AnyObject]> = [
            [
                "comment": "my First Comment",
                "commentDate": "2014-05-13 14:30 PM",
                "isSigned": 1,
                "patientId": 2,
                "documentId": 3
            ],
            [
                "comment": "my SecondComment",
                "commentDate": "2014-05-14 14:30 PM",
                "isSigned": 2,
                "patientId": 3,
                "documentId": 4
            ],
            [
                "comment": "my third Comment",
                "commentDate": "2014-05-15 14:30 PM",
                "isSigned": 3,
                "patientId": 4,
                "documentId": 5
            ]
        ]

    Luego usé un bucle for para publicar cada objeto de la matriz para contabilizar la API.

        var index = comments.count
        var i = 0
    
        for i = 0; i < index; i++ {
    
            let urlString = "\(.baseURL)...etc"
    
            let parameters = comments[i]
    
            Alamofire.request(.POST, urlString, parameters: parameters)
    
                .responseJSON { (req, res, data, error) -> Void in
    
    //                   println(req)
    //                   println(res)
    //                   println(data)
    //                   println(error)
    
                    println("\(i) of \(index) posted")
            }
        }

    Maneras más eficientes si la API permite, pero por otro lado esta el flujo de las grandes obras.

    • wow, eso es lo que yo llamo un código ineficaz!
    • Lo que es ineficiente? Tienes algo mejor??
    • usted está haciendo 1 petición http por cada comentario. es la manera más eficiente para enviar todos los comentarios en una sola solicitud.
    • la api con la que estaba trabajando no permitir que, por lo tanto mi «ineficiente» trabajo alrededor. buen punto, aunque. debo aclarar mi respuesta.
    • su api no tiempo de espera de los 4 postes consecutivos sin retrasos?

Dejar respuesta

Please enter your comment!
Please enter your name here