下载时在UITableView中异步加载图像

时间:2017-05-12 15:41:10

标签: ios swift uitableview

我想知道是否有任何方法可以在下载项目时继续重新加载tableView。

有与这些图像相关的图像和信息。当用户首次打开应用程序时,应用程序开始使用HTTP下载图像和数据。用户只有在他/她继续离开viewController并返回时才能看到tableView中下载的项目。

我尝试过这样的事情:

while downloading {
    tableView.reloadData()
}
但是,这会占用太多内存并导致应用程序崩溃。

如何将tableView与图像和数据一起异步填充,同时仍然保留在tableViewController中?

P.S。如果您对我正在使用的库或API感兴趣,我使用Alamofire下载和Realm进行数据持久化。

1 个答案:

答案 0 :(得分:-1)

正确和通常的方法是将数据重新加载到表中,而不是委托单个单元格从链接中异步加载图像。

在swift中,你可以扩展UIImage

extension UIImageView {
func imageFromUrl(urlString: String) {
    if let url = NSURL(string: urlString) {
        let request = NSURLRequest(URL: url)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {
            (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
            if let imageData = data as NSData? {
                self.image = UIImage(data: imageData)
            }
        }
    }
}

}

在你的CellForRowAtIndexPath中使用类似的东西从链接加载图像

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

...
cell.image.imageFromUrl(dataArray[indexPath.row].imageUrl)

return cell
}