在我的方法cellForItemAtIndexPath中,我有以下代码:
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadWithURL:[NSURL URLWithString:coverURL] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {
RRRBigItemCell *cell = (RRRBigItemCell *)[collectionView cellForItemAtIndexPath:indexPath];
if (cell) {
RRRImageView *coverView = (RRRImageView *)[cell viewWithTag:COVER_TAG];
coverView.image = image;
}
}];
当我启动应用程序并向下滚动时,一切正常。但是当我向上滚动而不是已显示的单元格尚未加载图像时(单元格== nil)。如果我再次向下滚动,则已经显示的单元格仍然存在问题,只有新单元格才加载图像。
知道我在做什么错吗?
最佳答案
@pawan是正确的,这将是实现SDWebImage的最简单方法。它基本上是UIImage的类别,因此只需使用类别方法(setImageWithURL)。
自您提出问题以来,还有其他几点;
因此,如果您坚持按照自己的方式进行操作,则代码可能写成如下(使用类别是最好和最简单的方法)
__weak myCollectionViewController *weakSelf = self;
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadWithURL:[NSURL URLWithString:coverURL] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {
dispatch_async(dispatch_get_main_queue(), ^{
if ([weakSelf.collectionView.indexPathsForVisibleItems containsObject:indexPath]) {
RRRBigItemCell *cell = (RRRBigItemCell *)[weakSelf.collectionView cellForItemAtIndexPath:indexPath];
RRRImageView *coverView = (RRRImageView *)[cell viewWithTag:COVER_TAG];
coverView.image = image;
};
});
}];