1

我遇到了一个问题。我想用一些文本和一个可以更改的配置文件图像填充一个表格视图,我为此使用了这个函数。

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

    let cell: CommonCellView!
    cell = self.tableView.dequeueReusableCellWithIdentifier("CommonCellView") as! CommonCellView
    cell.nameLabel.text = self.userCollection[indexPath.row].display_name
    cell.companyLabel.text = self.userCollection[indexPath.row].user_organisation
    cell.profileImage.hnk_setImageFromURL(NSURL(string: self.userCollection[indexPath.row].profile_picture)!)
    self.makeImageViewCircular(cell.profileImage.layer, cornerRadius: cell.profileImage.frame.height)
    cell.profileImage.clipsToBounds = true

    return cell
}

这里没什么好惊讶的。但是,当我更改自己的个人资料图片时,我会将其发送到 API 并修改此功能,它会显示缓存的图像。所以我认为我可能会尝试一些不同的东西,为什么不使用 Alamofire 获取每个单元格的所有图像。

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

    let cell: CommonCellView!
    cell = self.tableView.dequeueReusableCellWithIdentifier("CommonCellView") as! CommonCellView
    cell.nameLabel.text = self.userCollection[indexPath.row].display_name
    cell.companyLabel.text = self.userCollection[indexPath.row].user_organisation
   cell.profileImage.image = UIImage()
    //getting the cell image
    Alamofire.request(.GET, self.userCollection[indexPath.row].profile_picture)
        .response {(request, response, avatarData, error) in

                        let img = UIImage(data: avatarData!)
                        cell.profileImage.image = img

    }
    self.makeImageViewCircular(cell.profileImage.layer, cornerRadius: cell.profileImage.frame.height)
    cell.profileImage.clipsToBounds = true

    return cell
}

这适用于用户非常快速滚动的程度,将显示不同用户的图像,直到请求得到满足。好吧,让这发生在其他地方,并为图像使用一个数组。我也试过了。但是因为它是异步的,所以图像会以错误的顺序进入数组。所以回到HanekeSwift。我阅读了文档,发现我在磁盘上有一个缓存,但我无法清除或删除它。

清除缓存我也试过: NSURLCache.sharedURLCache().removeAllCachedResponses()

但我什么也没做。它适用于 Alamofire 情况,但也不是一个好的解决方案。

我想使用 hanekeSwift,因为 HanekeSwift 足够快,可以获取所有图像。但我想在每次控制器加载时清除缓存。

任何建议,将不胜感激!

切斯

4

1 回答 1

0

我发现了一个问题。

首先,我运行的是旧版本的 pod。所以更新后我可以使用该功能。

Shared.imageCache.removeAll()

将 haneke 导入控制器后。

最后的代码看起来像这样。func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: CommonCellView!
    cell = self.tableView.dequeueReusableCellWithIdentifier("CommonCellView") as! CommonCellView
    cell.nameLabel.text = self.userCollection[indexPath.row].display_name
    cell.companyLabel.text = self.userCollection[indexPath.row].user_organisation
    cell.profileImage.image = UIImage()
    //getting the cell image
    cell.profileImage.hnk_setImageFromURL(NSURL(string: self.userCollection[indexPath.row].profile_picture)!)
    //deleting it from cache
    Shared.imageCache.removeAll()
    self.makeImageViewCircular(cell.profileImage.layer, cornerRadius: cell.profileImage.frame.height)
    cell.profileImage.clipsToBounds = true

    return cell
}

它现在可以工作,但是在其他单元格被填满时一直删除缓存似乎有点矫枉过正。

于 2016-07-06T13:29:40.670 回答