example afhttprequestoperation ios objective-c afnetworking afnetworking-2 afjsonrequestoperation

ios - afhttprequestoperation - afnetworking example



Reemplazo para AFJSONRequestOperation en AFNetworking 2.x (2)

Estoy haciendo una aplicación básica de iPhone con solicitudes HTML, siguiendo este tutorial.

El tutorial me hace usar AFJSONRequestOperation en AFNetworking. El problema es que estoy usando AFNetworking versión 2, que ya no tiene AFJSONRequestOperation.

Entonces, por supuesto, este código (de aproximadamente la mitad del tutorial, bajo el encabezado " Consultar la API de búsqueda de iTunes Store ") no se compila:

NSURL *url = [[NSURL alloc] initWithString: @"http://itunes.apple.com/search?term=harry&country=us&entity=movie"]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSLog(@"%@", JSON); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo); }]; [operation start];

Mi pregunta es, ¿con qué sustituyo AFJSONRequestOperation para poder seguir trabajando con AFNetworking 2.x? He buscado en Google y he encontrado que nadie más parece estar haciendo esta pregunta.


¿Podrías usar AFHTTPSessionManger? Entonces algo como

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager GET:[url absoluteString] parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { // Handle failure }];

Otra alternativa podría ser usar AFHTTPRequestOperation y nuevamente configurar el [AFJSONResponseSerializer serializer] respuestas en [AFJSONResponseSerializer serializer] . Entonces algo como

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; operation.responseSerializer = [AFJSONResponseSerializer serializer]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation , id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // Handle error }];


Del artículo de NSHipster sobre AFNetworking 2 :

Uno de los avances de la nueva arquitectura de AFNetworking 2.0 es el uso de serializadores para crear solicitudes y analizar respuestas. El diseño flexible de los serializadores permite que se transfiera más lógica de negocios a la capa de red y que el comportamiento predeterminado previamente incorporado se personalice fácilmente.

En AFNetworking 2, los serializadores (los objetos que convierten los datos HTTP en objetos utilizables de Objective C) ahora son objetos separados del objeto de operación de solicitud.

AFJSONRequestOperation, etc. por lo tanto, ya no existe.

Desde la documentación de AFJSONResponseSerializer :

AFJSONResponseSerializer es una subclase de AFHTTPResponseSerializer que valida y descodifica las respuestas JSON.

Hay algunas formas de golpear la API que mencionaste. Aquí hay uno:

NSURL *url = [[NSURL alloc] initWithString:@"http://itunes.apple.com/search?term=harry&country=us&entity=movie"]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"success: %@", operation.responseString); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"error: %@", operation.responseString); }]; [operation start];