Vous trouverez ci-dessous un bloc de code qui s'exécute dans un thread distinct du thread principal de mon application. Comment puis-je mettre l'interface à jour après chaque vignette? Pour l'instant, il ne se met pas à jour tant que la méthode n'est pas terminée. Les boutons sont déjà ajoutés à un UIScrollView.Comment puis-je mettre à jour l'interface utilisateur au milieu de ce fil?
(LotsGridButton est juste un UIButton avec des propriétés supplémentaires.)
- (void)fetchThumbnails {
CCServer* server = [[CCServer alloc] init];
for (int i=0; i<[buttons count]; i++) {
LotsGridButton* button = [buttons objectAtIndex:i];
if (button.lot.thumbnail) continue;
// load the thumbnail image from the server
button.lot.thumbnail = [server imageWithPath:button.lot.thumbnailURL];
[button setImage:button.lot.thumbnail forState:UIControlStateNormal];
}
[server release];
}
doux! cela a fonctionné, une fois que j'ai fait une méthode wrapper (puisque performSelector ne prend qu'un argument et setImage: forState: prend 2). est-ce une instance d'un modèle général, comme "changer le widget dans le thread principal et il va montrer ses changements tout de suite"? – lawrence
Sur l'iPhone, au moins, les mises à jour de l'interface utilisateur ont lieu sur le fil principal. Vous ne pouvez pas mettre à jour de manière fiable les widgets à partir des threads d'arrière-plan. Ainsi, en exécutant une méthode sur le thread principal qui effectue les mises à jour de l'interface utilisateur, vous avez plus de chances d'obtenir des mises à jour plus rapides de l'interface utilisateur. –