Emigrar desde AFNetworking 1.3 a AFNetworking 2.0

Estoy intentando migrar un proyecto de AFNetworking 1.3 a AFNetworking 2.0.

En el proyecto AFNetworking 1.3 tengo este código:

- (void) downloadJson:(id)sender { NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://myServer/api/call?param1=string1&param2=string2"]]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { // handle success } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"%ld", (long)[response statusCode]); NSDictionary *data = JSON; NSString *errorMsg = [data objectForKey:@"descriptiveErrorMessage"]; // handle failure }]; [operation start]; } 

Cuando el cliente envía una URL que no está correctamente formateada o con parameters incorrectos, el server devuelve un error 400 e incluye JSON con un "descriptiveErrorMessage" que leí en el bloque de falla. Utilizo este "descriptiveErrorMessage" para determinar qué ocurre con la url y post al usuario si es apropiado.

El código del proyecto AFNetworking 2.0 se ve así:

 - (void)downloadJson:(id)sender { NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://myServer/api/call?param1=string1&param2=string2"]]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; operation.responseSerializer = [AFJSONResponseSerializer serializer]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { // handle success } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // any way to get the JSON on a 400 error? }]; [operation start]; } 

En el proyecto AFNetworking 2.0 no veo ninguna forma de hacer que el JSON lea el "descriptiveErrorMessage" enviado por el server. Puedo get los encabezados de respuesta de NSHTTPURLResponse en la operación pero eso es todo lo que puedo get, tal vez me estoy perdiendo algo.

¿Hay alguna forma de get el JSON en el bloque de fallas? Si no, ¿alguien puede sugerir una mejor manera de hacerlo?

Gracias de antemano por cualquier ayuda con este problema.

Creo que podría intentar acceder a la propiedad responseData del parámetro de operation pasado al bloque de falla.

No estoy seguro de que contendrá los datos de JSON que devuelve tu server, pero toda la información debería estar allí.

Espero eso ayude.

Encontré la mejor solución para esto. He usado 'AFHTTPRequestOperationManager'

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager GET:@"http://localhost:3005/jsondata" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Result: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", [error localizedDescription]); }];