2011-10-27 14 views
7

Recibí un hilo separado que crea un objeto UIView, lo inserta en el origen de datos de UITableView y luego llama a reloadData en el UITableView. Sin embargo, como se trata de un hilo separado, no puede invocar reloadData directamente, necesita hacer que el hilo principal lo haga ... ¿pero cómo le dices al hilo principal que lo haga?iOS: otro hilo necesita enviar reloadData al hilo principal

Gracias

Respuesta

20
[self.tableView performSelectorOnMainThread:@selector(reloadData) 
           withObject:nil 
           waitUntilDone:NO]; 
+1

Vine aquí para copiar esta línea :). Tq –

1

¿Qué tal algo como esto? (Puede que no se compile, estoy escribiendo a cabo)

- (void) callReloadData 
{ 
    if ([NSThread isMainThread]) { 
     @synchronized (self.tableView) { 
      [self.tableView reloadData]; 
     } 
    } else { 
     [self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 
    } 
} 
+1

'performSelectorOnMainThread:' invocará su selector inmediatamente si 'waitUntilDone:' es SÍ, por lo que este código no tiene sentido. (No tengo idea de por qué elegiste lanzar un bloque '@ synchronized' tampoco). – titaniumdecoy

7

Usted puede utilizar asíncrono de despacho, este método le permite Mariscal subproceso de trabajo a los bloques de código en línea en lugar de métodos usando performSelectorOnMainThread:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableview reloadData]; 
});' 
Cuestiones relacionadas