iOS – UIProgressView solo se actualiza una vez

Estoy cargando datos de una API y estoy usando una UIProgressView para mostrar cuánto se ha cargado.

En mi opinión, Voy a utilizar el Alcance para comprobar que hay una connection a Internet. Entonces, si la hay, se llama a la siguiente línea 10 veces en una function.

[self performSelectorInBackground:@selector(updateProgress) withObject:nil]; 

Esto luego ejecuta este método

 -(void)updateProgress { float currentProgress = myProgressBar.progress; NSLog(@"%0.2f", currentProgress); [loadingProg setProgress:currentProgress+0.1 animated:YES]; } 

El flotante aumenta en 0.1 y la vista de carga muestra esto.

Cuando se descarta la vista (es una vista modal) y luego se recupera, el método se ejecuta y el NSLog muestra que el CurrentProgress se está incrementando como debería. Sin embargo, la barra de progreso permanece vacía. ¿Alguien sabe qué podría causar esto?

Como reference, estoy usando ARC.

Actualizar:

Así es como llamo a la API

 NSString *urlString = **url**; NSURL *JSONURL = [NSURL URLWithString:urlString]; NSURLRequest *request = [NSURLRequest requestWithURL:JSONURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; if(connectionInProgress) { [connectionInProgress cancel]; } connectionInProgress = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; //This is where I call the update to the progress view 

Y tengo estas funciones:

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { JSONData = [NSMutableData data]; [JSONData setLength:0]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [JSONData appendData:data]; } -(void) connectionDidFinishLoading:(NSURLConnection *)connection { //add data to mutable array and other things } 

Cuando se trata de componentes de interfaz de usuario (UI), debe realizar los methods en el hilo principal. Por regla general, cuando progtwig, debe configurar las operaciones de interfaz de usuario en el subprocess principal, y las operaciones pesadas, complejas y más exigentes de performance en subprocesss de background; esto se denomina multiprocess (como sugerencia lateral, sería bueno leer sobre GCD – Grand Central Dispatch. Si necesita hacer operaciones más largas, consulte este buen tutorial de Ray Wenderlich .)

Para resolver esto, debe llamar a [self performSelectorOnMainThread:@selector(updateProgress) withObject:nil]; y luego, en el método, lo siguiente:

 -(void)updateProgress { float currentProgress = myProgressBar.progress; NSLog(@"%0.2f", currentProgress); dispatch_async(dispatch_get_main_queue(), ^{ [loadingProg setProgress:currentProgress+0.1 animated:YES]; }); } 

Es necesario actualizar la interfaz de usuario en el hilo principal. Cambio

 [self performSelectorInBackground:@selector(updateProgress) withObject:nil]; 

a

 [self performSelectorOnMainThread:@selector(updateProgress) withObject:nil waitUntilDone:NO];