SDWebImage
是UIImageView
的扩展。有一种方法:
sd_setImageWithURL(NSURL(string: url), placeholderImage: placeholder, options: options, completed: { image, error, cache, url in
//do sth after it is completed
})
但是在completed
块中,我不能决定是否允许SDWebImage
分配图像它是自动分配的,而无需询问开发人员是否允许这样做当我在滚动表格时将图像分配给UITableViewCell
中的UIImageView
时,会出现问题。
很明显,在它完成下载之前,该单元格可能会被重新用于不同的行,最终可能会有不同的图像。
如何使用此库修复它
在下面的问题中:从UITableView单元格内的url异步加载图像-滚动时图像更改为错误的图像,有一个答案是SDWebImage
解决了这个问题,但这不是真的,或者我错过了什么。
这应该没有必要。如果你查看UIImageView类别的实现,你会看到:
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
[self sd_cancelCurrentImageLoad];
objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
这表明,在您调用setImage的那一刻,它就取消了与图像视图实例相关联的下载。由于UITableView重用其视图,因此这不应该成为问题。查看它们如何将imageView和URL关联在一起。
您的问题可能是您没有每次都将imageView的image属性重置为nil。所以在牢房里ForRow你可能想要:
cell.imageView.image = nil
cell.imageView.sd_setImageWithURL(...)
启动新加载时,图像视图会取消任何当前加载。因此,如果重用图像视图,则可以避免此问题。
如果由于某种原因没有要设置的新图像,则可以调用sd_cancelCurrentImageLoad
并显式设置占位符图像。