Estoy tratando de usar el nuevo sendAsynchronousRequest agregado en iOS5. Tengo una clase de modelo (Archivo) con un método que solicita algunos datos de un servidor, y luego transfiero estos datos a la clase de controlador (FilesController) que creó el objeto modelo.sendAsynchronousRequest con tableView reloadData delay en draw
la clase del modelo tiene un método con el siguiente código:
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSArray *decodedResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *files = [self _dictionariesToFiles:decodedResponse];
handler(files);
}];
la clase del controlador, utiliza de esta manera:
[File findAll:conditions completionHandler:^(NSArray *files) {
dataSource = files;
NSLog(@"set");
[self.tableView reloadData];
NSLog(@"reload");
activityIndicator.hidden = TRUE;
}];
En la consola puedo ver inmediatamente cómo el NSLogs muestra el mensajes de "configuración" y "recarga", pero la tabla y el indicador no cambian hasta que hayan transcurrido algunos segundos (5-10 segundos).
¿Alguien sabe dónde está el problema?
Gracias.
PD: Cambié la solicitud asincrónica por una compatible y sincronizada, y luego el problema desapareció pero quiero usar una solicitud asíncrona para esto.
Este es el código de sincronización compatibles:
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSArray *decodedResponse = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
NSArray *files = [self _dictionariesToFiles:decodedResponse];
handler(files);
Esto se debe a que mainQueue se ejecuta en el hilo principal, que es donde tienen que pasar todas las cosas de la interfaz de usuario. – greenisus
@Rscorreia greenisus es correcto. Tuve el mismo problema que tú hasta que descubrí esto. –
@greenisus Entonces, ¿cómo se llega a una solicitud asíncrona para trabajar rápidamente? Si hace '' '[NSOperationQueue mainQueue]' '', lo pone en el hilo principal, lo que frustra el propósito de usar una solicitud asincrónica en primer lugar ....? – Supertecnoboff