在异步加载中重新加载数据

Reload data in Asynchronous Loading

我已经将异步图像加载到我的 swift 项目中,以在 table 中的单元格中加载一系列图像。

我已使用以下扩展程序完成此操作

extension UIImageView {
public func imageFromServerURL(urlString: String, defaultImage : String?) {
    if let di = defaultImage {
        self.image = UIImage(named: di)
    }

    URLSession.shared.dataTask(with: NSURL(string: urlString)! as URL, completionHandler: { (data, response, error) -> Void in

        if error != nil {
            print(error ?? "error")
            return
        }
        DispatchQueue.main.async(execute: { () -> Void in
            let image = UIImage(data: data!)
            self.image = image

        })

    }).resume()
  }
}

我通过声明一个实例方法来调用方法

let imageView = UIImageView()

然后 运行 稍后在我的代码中。

cell.posterImageView!.image = UIImage(imageView.imageFromServerURL(urlString: posterImageURL as! String ,defaultImage: "noPosterImage.png" ))

除了图像不会在我的 table 中更新,直到我将图像滚动到视图之外然后将其滚动回视图之前,这大部分都有效。

经过我自己的研究,我发现这个方法似乎对我有帮助

self.tableview.reloadData()

当我试图在我的扩展中像这样将它实现到我的代码中时

DispatchQueue.main.async(execute: { () -> Void in
        let image = UIImage(data: data!)
        self.image = image
        self.tableview.reloadData()
    })

我收到错误

Value of type 'UIImageView' has no member 'tableview'

我是 swift 的新手,所以我不太确定如何解决这个错误,我敢肯定这很简单

关于如何解决此错误或简单地解决整个问题的任何建议?

您通常使用 IBOutlets 将故事板中的视图连接到您的 UIViewController。在您的情况下,您可以将情节提要中的 tableView 连接到右舷中拥有 UIViewController 实例的 viewController。

然后你可以在viewController里面调用tableView.reload()重新加载table.

无法从故事板连接到 imageView,因此您无法将 tableView 连接到您的自定义 UIImageView class。

正在阅读 IBOutlets, Storyboards 供您完成。