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.
Как я уже сказал, нет результата. Любая другая идея? Я занимаюсь этим вопросом уже два дня, и я действительно в отчаянии.