2009-04-03 9 views
6

J'ai UITableViewController en tant que RootViewController. J'ai besoin d'ajouter des lignes à la table en fonction des données que je reçois d'un autre thread que je lance à partir du thread RootViewController. Quand je reviens d'un autre thread au thread de mon RootViewController j'ai les données mises à jour, Mais je ne peux pas mettre à jour le TableView. J'ai appelé la méthode [self.tableview reloadData]; mais cela ne semble pas fonctionner. J'ai également essayé l'appel [self.tableview setNeedsDisplay] mais sans succès. Comment mettre à jour TableView avec de nouvelles données?Impossible de mettre à jour 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]; 
} 

Puis il y a un thread de classe de réception qui reçoit des données en continu. Sa classe de base est NSObject. J'ai donc utilisé la classe Delegate d'application (qui a une instance de la classe RootViewController) pour appeler cette méthode reload data de la classe RootViewController dans mon thread de réception.

Je ne parviens pas à invoquer la méthode ci-dessus en utilisant performSelectorOnMainThread.

Répondre

12

hé êtes-vous sûr de mettre à jour l'affichage de table/rechargement de tableview sur le thread principal? i face au même problème, les données ont été là-bas, mais jusqu'à ce que l'utilisateur fait défiler, tableview n'a pas été mis à jour

sur googler je suis venu à vous connaître besoin d'appeler la méthode reloadData sur le thread principal ui

exemple de code ci-dessous:

- (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

Assurez-vous que les valeurs correctes sont renvoyées par numberOfRowsForSection pour les démarreurs.

Assurez-vous également que votre méthode cellForRowAtIndexPath utilise ces données pour obtenir le contenu de la cellule.

Votre méthode reloadData doit être appelée sur le thread principal, pas sur un autre thread.

Sera en mesure de mieux vous aider si vous pouvez poster le code correspondant.

Questions connexes