UIProgressView no actualiza?

Empecé a jugar con UIProgressView en iOS5, pero realmente no tuve suerte con eso. Tengo problemas para actualizar la vista. Tengo un set de acciones secuenciales, después de cada actualización de progreso. El problema es que la vista de progreso no se actualiza poco a poco sino que, después de todo, ha terminado. Es algo parecido a esto:

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

Navegando por el desbordamiento de stack, he encontrado posts como estos: setProgress ya no actualiza UIProgressView desde iOS 5 , lo que implica que para que esto funcione, necesito ejecutar un hilo por separado.

Me gustaría aclarar esto, ¿realmente necesito un hilo por separado para que UIProgressView funcione correctamente?

Sí, todo el propósito de la vista de progreso es para enhebrar.

Si estás ejecutando ese bucle en el hilo principal, estás bloqueando la interfaz de usuario. Si bloquea la interfaz de usuario, los usuarios pueden interactuar y la interfaz de usuario no puede actualizarse. Debe hacer todo el trabajo pesado en el hilo de background y actualizar la interfaz de usuario en el hilo principal.

Aquí hay una pequeña muestra

 - (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]; } 

Definir UIProgressView en el file .h :

 IBOutlet UIProgressView *progress1; 

En el 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=[NSString stringWithFormat:@" %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++; } 

Tuve un problema similar UIProgressView no se estaba actualizando, aunque hice setProgress e incluso probé setNeedsDisplay, etc.

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

Tenía (int) antes del progreso en la parte setProgress. Si llama a setProgress con int, no se actualizará como UISlider. Uno debe llamarlo con valor de flotador solo de 0 a 1.