UICollectionView показывает значения из старых ячеек при повторном использовании

У меня есть uicollectionview, который загружается на основе результатов serchbar в предыдущем контроллере uiview. В ячейки коллекции я загружаю изображения из интернета. Когда вызывается collectionView:(UICollectionView *)cv cellForItemAtIndexPath: я помещаю заполнитель на изображение ячейки и начинаю загрузку изображения из Интернета. Когда загрузка завершена, я перезагружаю ячейку, чтобы итоговое изображение было размещено правильно. Таким образом, метод вызывается дважды для каждой ячейки.

Это часть кода, которая может представлять интерес: - (TXCeldaPOICollection *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {

TXCeldaPOICollection *cell = [cv dequeueReusableCellWithReuseIdentifier:@"CeldaPOI" forIndexPath:indexPath];
...
       NSNumber *estaDisponible=[disponibles objectAtIndex:indexPath.row];
    if ([estaDisponible boolValue]==YES) {
        cell.imgCelda.image=[imagenes objectAtIndex:indexPath.row];
        NSLog(@"Imagen disponible en la celda numero numero %ld",(long)indexPath.row);
    } else {
        cell.imgCelda.image=[UIImage imageNamed:@"placeholder.png"];
        NSLog(@"Placeholder colocado en la celda numero numero %ld",(long)indexPath.row);
        // Monto la URL de descarga:
        NSString *urlDescarga=kBaseURL;

        urlDescarga=[urlDescarga stringByAppendingString:[[self.listaCeldas objectAtIndex:indexPath.row] valueForKey:@"foto1"]];
        NSURL *direccion=[NSURL URLWithString:urlDescarga];
        [self downloadImageWithURL:direccion conOrden:self.estadioFiltrado completionBlock:^(BOOL succeeded, UIImage *image, NSInteger ordenacion) {
            if (succeeded) {

                NSLog(@"Imagen descargada estadio %ld  orden %ld  indice %ld poi %ld@",self.estadioFiltrado, ordenacion, indexPath.row, [seleccionado.identificador integerValue]);

                if (ordenacion==self.estadioFiltrado) {
                    if (image!=nil) {
                        //Meto comprobacion de no rebase del array aunque genere algun error me protejo frente a cueelgues
                        NSInteger numeroImagenes= imagenes.count;
                        if (indexPath.row<=numeroImagenes-1) {

                            [imagenes replaceObjectAtIndex:indexPath.row withObject:image];
                            [disponibles replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:YES]];
                            NSArray *recargar=[[NSArray alloc] initWithObjects:indexPath, nil];
                             NSLog(@"Imagen DESCARGADA numero %ld y llamando a recargar ccelda",(long)indexPath.row);
                            [self.coleccion reloadItemsAtIndexPaths:recargar];
                        }
                    }
                }

            } else {

            }
        }];


    }
}

Странная вещь приходит сейчас. Когда я впервые загружаю представление коллекции для конкретного поиска в предыдущей строке поиска, поведение является ожидаемым. Каждая ячейка вызывается дважды, и я на короткое время вижу заполнитель в ячейках, а затем появляются разные изображения. Так что все в порядке.

Но, если я возвращаюсь к панели поиска -popViewController из той, на которой отображается представление коллекции, - происходит что-то странное, если я снова загружаю тот же самый вид коллекции - тот же результат выбранной панели поиска -. Сначала я вижу старые ячейки - я знаю, что они старые, потому что метод для новых не вызывается - потом я вижу заполнитель и, в конечном итоге, окончательное изображение, которое оказывается таким же, как в старых ячейках, но эффект не хорошо, потому что вы видите: image-placeholder-image.

Дело в том, что метод определения ячеек вызывается только дважды для каждой ячейки, как и должно быть, но отображается начальное содержимое ячейки.

Я прочитал несколько похожих вопросов и попробовал два подхода без успеха: - Я реализовал метод Prepareforreuse в своем классе ячеек. - Я использовал -(void)collectionView:(UICollectionView *)cv didEndDisplayingCell:(UICollectionViewCell *) ячейка для метода ItemAtIndexPath: (NSIndexPath *) indexPath.

Как я уже сказал, нет результата. Любая другая идея? Я занимаюсь этим вопросом уже два дня, и я действительно в отчаянии.

0 ответов

Другие вопросы по тегам