UIProgressView ne se met pas à jour?

J'ai commencé à jouer avec UIProgressView dans iOS5, mais je n'ai pas vraiment eu de chance avec ça. J'ai des problèmes pour mettre à jour la vue. J'ai un set d'actions séquentielles, après chaque mise à jour de la progression. Le problème est, la vue de progression n'est pas mise à jour peu à peu mais seulement après avoir fini. Ca fait plutot comme ca:

float cnt = 0.2; for (Photo *photo in [Photo photos]) { [photos addObject:[photo createJSON]]; [progressBar setProgress:cnt animated:YES]; cnt += 0.2; } 

Surchauffe de la stack de navigation, j'ai trouvé des messages comme ceux-ci – setProgress ne met plus à jour UIProgressView depuis iOS 5 , ce qui implique que pour que cela fonctionne, j'ai besoin d'exécuter un thread séparé.

Je voudrais clarifier cela, ai-je vraiment besoin de thread séparé pour UIProgressView pour fonctionner correctement?

Oui, le but entier de la vue de progression est pour le threading.

Si vous exécutez cette boucle sur le thread principal, vous bloquez l'interface user. Si vous bloquez l'interface user, les users peuvent interagir et l'interface user ne peut pas se mettre à jour. Vous devriez faire tout le poids lourd sur le fil de fond et mettre à jour l'interface user sur le fil principal.

Heres un petit échantillon

 - (void)viewDidLoad { [super viewDidLoad]; [self performSelectorInBackground:@selector(backgroundProcess) withObject:nil]; } - (void)backgroundProcess { for (int i = 0; i < 500; i++) { // Do Work... // Update UI [self performSelectorOnMainThread:@selector(setLoaderProgress:) withObject:[NSNumber numberWithFloat:i/500.0] waitUntilDone:NO]; } } - (void)setLoaderProgress:(NSNumber *)number { [progressView setProgress:number.floatValue animated:YES]; } 

Définissez UIProgressView dans le file .h :

 IBOutlet UIProgressView *progress1; 

En file .m :

 test=1.0; progress1.progress = 0.0; [self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:NO]; - (void)makeMyProgressBarMoving { NSLog(@"test %f",test); float actual = [progress1 progress]; NSLog(@"actual %f",actual); if (progress1.progress >1.0){ progress1.progress = 0.0; test=0.0; } NSLog(@"progress1.progress %f",progress1.progress); lbl4.text=[NSSsortingng ssortingngWithFormat:@" %i %%",(int)((progress1.progress) * 100) ] ; progress1.progress = test/100.00;//actual + ((float)recievedData/(float)xpectedTotalSize); [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(makeMyProgressBarMoving) userInfo:nil repeats:NO]; test++; } 

J'ai eu un problème similaire. UIProgressView n'était pas mis à jour bien que j'ai fait setProgress et même essayé setNeedsDisplay, etc.

 float progress = (float)currentPlaybackTime / (float)totalPlaybackTime; [self.progressView setProgress:progress animated:YES]; 

J'ai eu (int) avant de progresser dans la partie setProgress. Si vous appelez setProgress avec int, il ne sera pas mis à jour comme UISlider. On devrait l'appeler avec la valeur de flotteur seulement de 0 à 1.