2010-09-29 7 views
3

J'ai ajouté un UIProgressView à self.view en tant que sous-vue. J'ai un UITableView avec des lignes chargées. J'ai besoin d'une image dans chaque ligne mais je ne veux pas que l'application les attende, donc je décide d'exécuter NSThread avec le chargement des images. Lorsque j'essaie de mettre à jour la progression de UIProgressView depuis l'intérieur de mon thread, elle n'est pas mise à jour. Ai-je besoin de mettre en place des délégués peut-être?La progression d'UIProgressView n'a pas été mise à jour

Initialisation

progressView = [[[UIProgressView alloc] initWithFrame:CGRectZero] autorelease]; 
    [progressView setFrame:CGRectOffset(CGRectMake(0, 0, 320, 8), 0, 1)]; 
    [self.view addSubview:progressView]; 

Alors je lance mon fils

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    [progressView setProgress:0.0]; 
    NSThread *myThread = [[NSThread alloc] initWithTarget:self 
               selector:@selector(imageLazyLoading) 
                object:nil]; 

    [myThread start]; 
    [pool release]; 
    [myThread release]; 

Ensuite, j'essaie de le mettre à jour

CGFloat pr; 
for(int i=0; i < [self.itemsToDisplay count]; i++){ 
    if (!runThread) { 
     return; 
    } 
    pr = (CGFloat)i/(CGFloat)[self.itemsToDisplay count]; 
    [self performSelectorOnMainThread:@selector(updateProgressBar:) 
          withObject: [NSNumber numberWithFloat:pr] 
         waitUntilDone: YES]; 
    progressView.progress += 0.5;............. 

et rien du tout ....

+0

Vous êtes sûr que c'est ce que vous attendez d'être ?? – Daniel

+0

À quoi ressemble 'updateProgressBar:'? Je ne recommanderais pas de changer progressView.progress n'importe où, mais le fil principal. –

+0

Vous devez mettre à jour l'interface utilisateur sur le thread principal, pas sur un thread secondaire. – Nyx0uf

Répondre

0

I eu le même problème avec iOS 5.0. Il semble que jusqu'à 5.0, vous pouvez mettre à jour la variable 'progress' à partir de n'importe quel thread, mais le setNeedsDisplay doit être appelé depuis le thread principal. À partir de la version 5.0, vous devez également définir la valeur "progression" du thread principal. J'espère que ça aide tout le monde.

Questions connexes