2012-06-18 9 views
5

Estoy tratando de pasar múltiples valores para una clave de parámetro a una solicitud HTTP utilizando el método AFHTTPClient "postPath". Sin embargo, la variable de parámetros es un NSDictionary, por lo que no puedo establecer varios valores para mi clave "email". Intenté enviar los valores del correo electrónico como una cadena separada por comas, pero eso no funciona, ya que mi servidor devuelve un error que indica que no he especificado ningún valor de correo electrónico.AFNetworking - Cómo especificar valores múltiples para una clave

Lo leí en la documentación sobre el uso del método multipartFormRequestWithMethod, pero no pude entender completamente cómo hacerlo funcionar. ¿Alguien puede dar un ejemplo de usar este método con múltiples valores para una sola clave?

Gracias

Rich

+0

Desde NSDictionary no permite duplicados de las llaves, esto le impide cumplir su caso de uso particular. Lo que podría hacer es tomar la NSMutableURLRequest creada en este método y construir manualmente la cadena de cuerpo POST usted mismo. –

Respuesta

2

no se pueden definir varios valores para una sola tecla. Sin embargo, puede definir una clave para tener una matriz, que a su vez contiene múltiples valores.

Dicho esto, no parece que email sea un campo que debería tener múltiples definiciones. Si desea aceptar valores múltiples, probablemente debería cambiar el nombre de ese parámetro a emails.

+0

Gracias por la respuesta. Intenté pasar el parámetro de correo electrónico a NSArray pero el servidor respondió de manera similar que no había pasado una dirección de correo electrónico. ¿Algunas ideas? –

+0

Parece que el código de AFNetworking toma la clave de "correo electrónico" y la convierte en "correo electrónico []", por lo que el servidor no reconoce una dirección de correo electrónico aprobada. ¿Hay alguna manera de evitar que esto suceda? –

+0

@RichMorey Ese es el punto: 'email []' es una convención utilizada por muchos frameworks como Rails para indicar que se pasan múltiples valores. ¿Escribiste la API? Si obtiene una validación como esa, parece que el servidor solo quiere un solo correo electrónico. ¿Por qué no solo hacer eso? – mattt

4

Combinando los valores múltiples para una tecla.

usando NSDictionary + NSArray

Por ejemplo:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", [NSArray arrayWithObjects:@"value3",@"value4",@"value5",nil], @"param3", nil]; 

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"/yourhostpath" parameters:params]; 

es necesario sustituir "URL" y "yourhostpath" a su cuenta, por favor haga referencia AFHttpClient código de demostración de AFNetworking para esto.

12

Combinación de los valores de consulta múltiple para una clave.

Si usa NSDictionary + NSSet obtiene la url de consulta sin [] de NSArray.

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
[NSSet setWithObjects:@"value1", @"value2", nil], @"myKey", nil]; 

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 
NSURLRequest *request = [httpClient requestWithMethod:@"GET" path:@"/path" parameters:params]; 

PS: Mejor tarde que nunca ...

+0

¿Qué sucede si también deseo enviar múltiples parámetros con el mismo valor? Este '[NSSet setWithObjects: @" value1 ", @" value1 ", @" value2 ", @" value2 ", nil]' no funciona. – krotov

Cuestiones relacionadas