Cómo mejor estructurar el código para download resources usando AFNetworking y CoreData en iOS

Primero descargo un documento de índice único usando AFHTTPClient y grabo cada logging usando CoreData. Luego necesito generar un process por separado para download cada logging individual. ¿Cuál es la mejor manera de hacer esto?

¿Es razonable hacer una request para cada recurso y solo dejar que se complete? Puede haber cien más o less.

Alternativamente, podría cargar el primero, enviar una request, luego cargar con éxito y enviar requestes posteriores.

Estoy usando CoreData para actualizar la database que supongo que significa que necesito tener un NSManagedObjectContent por separado para cada request.

También tengo curiosidad por saber, ¿AFHTTPClient realiza devoluciones de llamada en el hilo principal o en el hilo que inició la request? Prefiero no bloquear el subprocess principal al ejecutar CoreData I / O.

Con respecto a la descarga de los resources, podría usar AFNetworking para hacerlos queue.

Es posible que pueda usar – (void) enqueueHTTPRequestOperation: (AFHTTPRequestOperation *) operación de AFHTTPClient.

Primero crea un singleton para mantener tu propio AFHTTPClient así:

 @interface CustomHTTPClient : NSObject + (AFHTTPClient *)shanetworkingHTTPClient; @end @implementation CustomHTTPClient +(AFHTTPClient *)shanetworkingHTTPClient { static AFHTTPClient *shanetworkingHTTPClient = nil; if(shanetworkingHTTPClient == nil) { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // Create the http client shanetworkingHTTPClient = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://mybaseurl.com"]]; }); } return shanetworkingHTTPClient; } @end 

Luego coloque sus requestes como sigue:

 // Store the operations in case the failure block needs to cancel them __block NSMutableArray *operations = [NSMutableArray array]; // Add operations for url for (NSURL *url in urls) { NSURLRequest *request = [NSURLRequest requestWithURL:url]; __block AFHTTPRequestOperation *operation = [[CustomHTTPClient shanetworkingHTTPClient] HTTPRequestOperationWithRequest:request success:^( AFHTTPRequestOperation *operation , id responseObject ){ // Do something } failure:^( AFHTTPRequestOperation *operation , NSError *error ){ // Cancel all operations if you need to for (AFHTTPRequestOperation* operation in operations) { [operation cancel]; } }]; [operations addObject:operation]; } for (AFHTTPRequestOperation* operation in operations) { [[CustomHTTPClient shanetworkingHTTPClient] enqueueHTTPRequestOperation:operation]; } 

También hay enqueueBatchOfHTTPRequestOperations: progressBlock: completionBlock: si necesita monitorear el progreso.

Proyecto AFNetworking: https://github.com/AFNetworking/AFNetworking/

Documentos de AFNetworking: http://afnetworking.org/Documentation/index.html