在 UITableView 重新加载时从 SDWebImage 设置图像

Setting Image from SDWebImage on UITableView Reload

我有一个 UITableView 中的单元格列表。正在单元格内通过以下方法下载图像

self.profileImage.sd_setImage(with: URL(string: profileURL), completed: { (image, error, cache, url) in
                            if image != nil {
                                self.profileImage.image = image
                            } else {
                                print("didn't load image")
                            }
                        })

但是,在重新加载和重新加载 UITableView 时,该索引的先前图像会加载一小会儿,然后会出现该索引的更新图像。

现在我的理论是发生以下情况(如果我错了请纠正我)...

  1. 检索到 URL 后立即下载图像。
  2. 该图像使用 SDWebImage 缓存。
  3. TableView 重新加载,单元格中的数据发生变化。
  4. SDWebImage 使用该 indexPath 的缓存图像而不是单元格。 (这里有问题)
  5. SDWebImage 再次为该单元格下载 URL 并刷新图像。

如果这是正确的,我需要执行以下操作...

  1. 检索到 URL 后立即下载图像。
  2. 使用 SDWebImage 缓存图像。
  3. TableView 重新加载,单元格中的数据发生变化。
  4. 使用该单元格的缓存图像。

我是否使用了错误的方法来设置 self.profileImage?

一如既往,我们非常感谢您的帮助。

1.Download 检索到 URL 图像。 2.Cache带SDWebImage的图片。

您使用此代码

let url = NSURL(string: "https://test.com/upload/image.jpg")!

self.imageD.sd_setImage(with: url as URL!, placeholderImage: UIImage(named: "default_logo"), options: .transformAnimatedImage, progress: nil, completed: nil)

这个default_logo放在里面Assets.xcassets

3.TableView 重新加载,单元格中的数据发生变化。

self.tableView.reloadData()

如果您使用 UITableViewCell 配置您的单元格,那么您可以覆盖方法 prepareForReuse() 以清除旧图像,例如:

override func prepareForReuse() {
    super.prepareForReuse()
    profileImage.image = nil
}

这样旧的缓存图片就不会出现了。