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

时间:2018-08-03 16:16:34

标签: ios swift asynchronous swift3 uiimageview

我已经在我的swift项目中实现了异步图像加载,以便在表格的单元格中加载一系列图像。

我已经做了以下扩展名

$('body').on('mouseover', '.has-subnav', function() {
   $(this).addClass('.active');
});
//and to remove class on mouseout
$('body').on('mouseover', '.has-subnav', function() {
   $(this).removeClass('.active');
});

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

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" ))

当我尝试在扩展程序中将其实现到我的代码中时

self.tableview.reloadData()

我收到错误

  

'UIImageView'类型的值没有成员'tableview'

我是新手,所以我不太确定如何解决此错误,我确定这很简单

关于如何解决此错误或只是整体解决问题的任何建议?

1 个答案:

答案 0 :(得分:1)

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

然后,您可以在viewController中调用tableView.reload()重新加载表。

无法从情节提要板连接到imageView,因此无法将tableView连接到自定义UIImageView类。

IBOutletsStoryboards上阅读以供您阅读。