2009-09-17 10 views
1

Je dois recharger simultanément uitableview en utilisant un thread. J'utilise déjà deux threads pour charger les données du web. Est-il possible d'utiliser un thread pour recharger tableview? Est-ce qu'il y a un autre moyen?recharger simultanément uitableview

Répondre

0

simultanément avec quoi?

tout UIKit doit être fait sur le thread principal, de sorte que vous pouvez utiliser des threads d'arrière-plan pour parler à Internet ou faire votre propre traitement, mais toute interaction réelle avec UITableView doit être sur le thread principal.

1

Simultanément à quoi? Le rechargement prend du temps et vous devez recharger le modèle de données de back-up en arrière-plan, tout en continuant à afficher des données à l'utilisateur?

Si tel est le cas, alors je:

  1. Définir le modèle de données en tant que propriété.
  2. Mettez à jour un modèle de données temporaire dans un thread d'arrière-plan.
  3. Lors de la mise à jour, je mets à jour la propriété de modèle de données sur le thread principal.

Il est important d'effectuer la mise à jour de la propriété de modèle réel et de demander le rechargement des données pour la vue de table sur le thread principal. Sinon, il y aura un intervalle de temps où la vue de table peut demander une vue pour un élément de modèle de données qui n'est plus disponible.

Une mise en œuvre serait quelque chose comme ceci:

-(void)releadData; 
{ 
    [self performSelectorInBackground:@selector(reloadDataInBackground) 
         withObject:nil]; 
} 

-(void)reloadDataInBackground; 
{ 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
    MyDataModel* model = nil; 
    // Do what is needed to setup model. 
    [self performSelectorOnMainThread:@selector(updateModelOnMainThread:) 
         withObject:model 
         waitUntilDone:NO]; 
    [pool release]; 
} 

-(void) updateModelOnMainThread:(MyDataModel*)model; 
{ 
    self.model = model; 
    [self.tableView reloadData]; 
}