Actualice UIProgressView en UICollectionViewCell para download el file

Estoy intentando actualizar el UIProgressView en UICollectionViewCell cuando descargo un file, pero en algún momento la actualización de progressView y en algún momento no se actualiza, y no puedo entender por qué, este es el código para mostrar UICollectionViewCell:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"documentCell"; UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath]; NSManagedObject *doc = [self.magDocument objectAtIndex:indexPath.row]; UIButton *btn = (UIButton *)[cell viewWithTag:2003]; [btn addTarget:self action:@selector(addDocument:) forControlEvents:UIControlEventTouchUpInside]; UIProgressView *progressBar = (UIProgressView *)[cell viewWithTag:2005]; return cell; } 

Este es el button para iniciar la descarga:

 - (IBAction)addDocument:(id)sender { self.directCellPath = [self.myCollectionView indexPathForCell:(UICollectionViewCell *)[[sender superview] superview]]; NSManagedObject *document = [self.magDocument objectAtIndex:self.directCellPath.row]; [self loadLink:[document valueForKey:@"docUrl"]]; } - (void)loadLink:(NSString *)urlDownload { UICollectionViewCell *cell = (UICollectionViewCell *)[self.myCollectionView cellForItemAtIndexPath:self.directCellPath]; UIProgressView *prg = (UIProgressView *)[cell viewWithTag:2005]; AFDownloadRequestOperation *request = [[AFDownloadRequestOperation alloc] initWithRequest:requestUrl targetPath:zipDownloadPath shouldResume:YES]; [request setProgressiveDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpected, long long totalBytesReadForFile, long long totalBytesExpectedToReadForFile) { NSLog(@"%f",totalBytesReadForFile/(float)totalBytesExpectedToReadForFile); NSArray *progress = [NSArray arrayWithObjects:prg,[NSNumber numberWithFloat:totalBytesReadForFile/(float)totalBytesExpectedToReadForFile], nil]; [self performSelectorOnMainThread:@selector(updateProgressBar:) withObject:progress waitUntilDone:NO]; }]; [self.downloadQueue addOperation:request]; } - (void)updateProgressBar:(NSArray *)progress { UIProgressView *pgr = (UIProgressView *)[progress objectAtIndex:0]; [pgr setProgress:[[progress objectAtIndex:1] floatValue]]; } 

Una vez que la vista de progreso funciona y otras mil veces no funciona, no puedo entender cómo actualizar la vista de progreso, ¿alguna ayuda?

Cree su customCell y visualice todas las UIViews Visibles en él (init, add subview …). Que use método personalizado en cellForItemAtIndexPath para activarlo (mostrarlo). Si piensas en MVC, cellForItemAtIndexPath solo para Controller, no View.

En su caso, traiga todos IBAction, loadLink y updateProgress a customCell y envíe el parámetro para activarlos, o puede crear un nuevo protocolo como CustomCellDelegate para comunicarse.

Busca más información:

Error al configurar el text en la celda de vista de colección

Puede ser sobre el tema del hilo. sólo inténtalo

 dispatch_async(dispatch_get_main_queue(), ^{ UIProgressView *pgr = (UIProgressView *)[progress objectAtIndex:0]; [pgr setProgress:[[progress objectAtIndex:1] floatValue]]; });//end block 

pruebe asíncrono o sincronice