[英]UICollectionView with NINetworkImageViews repeats images
我正在使用Nimbuskit的NINetworkImageView。 我有一个简单的UICollectionView,它显示图像网格(NINetworkImageViews)。 通常,它的工作原理像一个超级按钮,但是在某些情况下,某些NINetworkImageViews显示错误的图像。
我认为当图像没有路径并且NINetworkImageView必须显示默认图像时会发生这种情况。 有时(几次)它没有显示默认图像,而是显示了其他图像,这些图像属于CollectionView的其他NINetworkImageView。
以下是相关代码:
- (UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"ShelvingCell";
ShelvingCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView prepareForReuse];
cell.feedNetworkImageView.delegate = self;
// El collage necesita un tratamiento especial
if (indexPath.section == 0 && indexPath.row == 0)
{
cell.feedTitleLabel.text = @"";
cell.lastFeedNewTitleLabel.text = @"";
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView setPathToNetworkImage:@""];
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView prepareForReuse];
cell.feedNetworkImageView.image = [UIImage imageNamed:@"collage.png"];
}
else
{
MOFeed *feed = [self.feeds objectAtIndex:(indexPath.section*3 + indexPath.row - 1)];
cell.feedTitleLabel.text = feed.title;
// Recuperamos la última noticia del feed
MONoticia *ultimaNoticia = [feed lastFeedNew];
cell.lastFeedNewTitleLabel.text = ultimaNoticia.title;
if (![feed.feedImageURL isEqualToString:@""] && feed.feedImageURL)
{
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView prepareForReuse];
[cell.feedNetworkImageView setPathToNetworkImage:feed.feedImageURL];
}
else
{
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView prepareForReuse];
cell.feedNetworkImageView.image = [UIImage imageNamed:@"shelvingcell.png"];
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView setPathToNetworkImage:@""];
}
}
return cell;
}
非常感谢!
卡洛斯
我遇到了同样的问题,当我深入研究问题时,看起来
[cell.feedNetworkImageView prepareForReuse];
没有取消所有下载操作。 你必须做一点hack
通话前
[cell.feedNetworkImageView setPathToNetworkImage:feed.feedImageURL];
取消所有网络操作操作,然后创建一个新的网络操作
[self.displayImage.networkOperationQueue cancelAllOperations];
self.displayImage.networkOperationQueue = [[NSOperationQueue alloc]init];
[cell.feedNetworkImageView setPathToNetworkImage:feed.feedImageURL];
由于您每次下载映像都需要它自己的操作队列,因此可以取消它,因此效率不高。 这可能需要更多的工作才能提高效率。 但到目前为止,似乎没有重复的图像
卡洛斯,我对NINetworkImageView不太了解,但是我的理论是UICollectionView正在重用您的视图,并且您不会取消请求。 假设您加载了第一个单元格,然后对该图像触发了一个请求。 然后,您开始滚动。 该第一个单元将在第一个请求完成之前被重用,并且可能这个重用该单元的新项没有图像,因此您不必调用setPathNetwork ...结果,新的重用单元将具有第一个单元图像。
NINetworkImageView中可能存在一种取消请求的方法。 每次重用这些视图之一时调用它。
sal!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.