ios - 一旦使用 SDWebImage 下载完成,如何决定是否将图像分配给 UIImageView?

标签 ios swift uitableview sdwebimage

SDWebImageUIImageView 的扩展。有一个方法:

sd_setImageWithURL(NSURL(string: url), placeholderImage: placeholder, options: options, completed: { image, error, cache, url in 

    //do sth after it is completed
})

但是在 completed block 中,我无法决定是否允许 SDWebImage 分配图像。 它是自动分配的,无需询问开发人员是否允许执行此操作。当我在滚动表格时将图像分配给 UITableViewCell 内的 UIImageView 时出现问题.

很明显,在下载完成之前,该单元格可能会被重新用于不同的行,最终可能会出现不同的图像。

如何使用这个库修复它?

在以下问题中:Async image loading from url inside a UITableView cell - image changes to wrong image while scrolling , 有一个答案说 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 的那一刻,它取消了与 ImageView 实例关联的下载。由于 UITableView 重用了它的 View ,所以这应该不是问题。查看他们如何将 imageView 和 URL 关联在一起。

您的问题可能是您没有每次都将 imageView 的图像属性重置为 nil。所以在 cellForRow 里面你可能想要:

cell.imageView.image = nil
cell.imageView.sd_setImageWithURL(...)

关于ios - 一旦使用 SDWebImage 下载完成,如何决定是否将图像分配给 UIImageView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34173323/

相关文章:

ios - 将导航栏放置在安全区域顶部

ios - dataWithContentsOfURL 与 downloadTaskWithURL

ios - 是否有与 Android API 方法 getAllCellInfo 等效的 iOS?

ios - 带圆角的 UIAppearance BarButtonItem

swift - RxSwift - 与 Singleton 不同类型的队列可观察值

ios - 如何将文本放入 segue 函数以传递给下一个 Controller ?

ios - 将带有事件指示器的刷新按钮添加到 JSON TableView

iphone - UITableView 查找部分标题的位置?

ios - 应用程序在 swift 3 中的 for 循环内崩溃

ios - 无法实现 SKSprite 类。没有错误信息,只是不显示