2011-10-27 22 views
7

Ho ottenuto un thread separato che crea un oggetto UIView, lo inserisce nell'origine dati di UITableView e quindi chiama reloadData su UITableView. Tuttavia, poiché è un thread separato, non può chiamare direttamente reloadData, deve fare in modo che il mainthread lo faccia ... ma come si dice al mainthread di farlo?iOS - un altro thread deve inviare reloadData al mainthread

Grazie

risposta

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

Sono venuto qui per copiare questa riga :). Tq –

1

Che ne dite di qualcosa di simile? (Non può compilare, sto scrivendo fuori)

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

'performSelectorOnMainThread:' invocherà immediatamente il suo selettore se 'waitUntilDone:' è YES, quindi questo codice è inutile. (Non ho idea del motivo per cui hai scelto di inserire anche un blocco '@ synchronized'.) – titaniumdecoy

7

È possibile utilizzare la spedizione asincrona, questo metodo permette al maresciallo thread di lavoro per blocchi di codice in-line, piuttosto che metodi utilizzando performSelectorOnMainThread:

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