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

标签 ios swift asynchronous swift3 uiimageview

我已经在我的 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/

相关文章:

ios - 使用特定标识符设置所有单元格的高度?

iOS 推特 NSURLErrorDomain Code=-1012

swift - 删除强制展开

ios - 如何在 iOS 中使用 health-kit 获取 bodyTemperature?

ios - UIView.animate View 框架的问题

ios - 将操作添加到已呈现的 UIAlertController

iOS:如何从我的应用程序中打开 Facebook 应用程序中的特定帖子?

python - 在普通函数中调用异步函数

scala - 执行 N 次 Scala Future

ios - 有没有办法从我的网站向 iPhone 发送推送通知?