2009-04-03 16 views
6

Ho UITableViewController come RootViewController. Ho bisogno di aggiungere righe alla tabella a seconda dei dati che ottengo da un altro thread che avvio dal thread di RootViewController. Quando torno di nuovo da un altro thread al thread del mio RootViewController ho i dati aggiornati, ma non riesco ad aggiornare TableView. Ho chiamato il metodo [self.tableview reloadData]; ma non sembra funzionare. Ho anche provato la chiamata [self.tableview setNeedsDisplay] ma senza successo. Come aggiorno TableView con nuovi dati?Impossibile aggiornare UITableView

In my RootViewController Class I have: 

- (void) reload { 

for(int i=0;i<[camDetails count];i++) 
{ 
    cCameraInformation *obj = [[cCameraInformation alloc] init]; 
    obj = [camDetails objectAtIndex:i]; 
    NSString *tString = [[NSString alloc] initWithFormat: @"  Remote  %s  %s",[obj->sCameraid UTF8String],[obj->sCameraid UTF8String]]; 
    [tableEntry addObject:tString]; 
} 
[self.tableView reloadData]; 
} 

Quindi c'è un thread di classe di ricezione che riceve continuamente dati. La sua classe base è NSObject. Quindi, ho usato la classe del delegato dell'applicazione (che ha un'istanza della classe RootViewController) per chiamare questo metodo di caricamento dei dati della classe RootViewController nel mio thread di ricezione.

Non riesco a richiamare il metodo precedente utilizzando performSelectorOnMainThread.

risposta

12

hey sei sicuro di aggiornare la visualizzazione tabella/ricaricare la visualizzazione tabella sul thread principale? ho affrontato lo stesso problema, i dati erano in là, ma fino utente scorre, Tableview non è stato aggiornato

su googling sono venuto a sapere è necessario chiamare il metodo reloadData sul thread principale dell'interfaccia utente

codice di esempio riportato di seguito:

- (void) getDataOnNewThread 
{ 
    // code here to populate your data source 
    // call refreshTableViewOnMainThread like below: 
    [self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:NO]; 
} 

- (void) refreshTableView 
{ 
    [tableView reloadData]; 
} 
1

Assicurarsi di avere restituito i valori corretti da numberOfRowsForSection per gli avviatori.

Verificare inoltre che il metodo cellForRowAtIndexPath utilizzi questi dati per ottenere il contenuto della cella.

Il metodo reloadData deve essere chiamato sul thread principale, non su altri thread.

Sarà in grado di aiutarti meglio se puoi pubblicare il codice pertinente.

Problemi correlati