我已经在我的 swift 项目中实现了异步图像加载,以在表格的单元格中加载一系列图像。
我已经用下面的扩展完成了
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" ))
除了在我将图像滚动出 View 然后将其滚动回 View 之前,图像不会在我的表格中更新外,这主要有效。
经过我自己的研究,我发现这个方法似乎对我有帮助
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 将 Storyboard中的 View 连接到您的 UIViewController。在您的情况下,您会将 Storyboard 中的 tableView 连接到右舷中拥有 UIViewController 实例的 viewController。
然后您可以在 viewController 中调用 tableView.reload()
来重新加载表格。
无法从 Storyboard连接到 imageView,因此您无法将 tableView 连接到您的自定义 UIImageView 类。
阅读 IBOutlets , Storyboards供您完成。
关于ios - 在异步加载中重新加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51676585/