UITableViewCell图像始终显示最后一个单元格图像

时间:2017-05-24 11:25:46

标签: swift image uitableview

我正在努力在tableview单元格中显示图像。我没有发布所有代码,但这就是我所做的:

  1. 将json解析为数组,并将img的url下载到downaload
  2. 将图像保存到文档文件夹中,为每个项目添加文件扩展名和唯一名称

    let whereToSavePath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)        
    
  3. 在表格视图中显示内容并从目录

  4. 加载图像

    以下是tableview cellForRowAt indexPath方法中的代码:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
        let findPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    
        for i in 0...allCards.count - 1 {
    
            cell?.textLabel?.text = allCards[indexPath.row].name
            let savedFile = (findPath[0] + "/" + allCards[i].cardID + ".png")
            print(savedFile)
            let image = UIImage(contentsOfFile: savedFile)
            cell?.imageView?.image = image
         }
        return cell!
    }
    

    每个单元格都正确显示卡片名称,但始终保持相同的图像,最后一个图像保存。我也尝试过:

    allCards[indexpath.row]
    

    但在这种情况下,不显示图像

    如果我在控制台中打印savedFile文件名是正确的,对于每张卡我保存了正确的文件,如果我进入文件夹,那么图片就是正确的名称

    这里有什么问题?

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

因此,问题在于索引路径中单元格内的循环。对于section函数中的行返回的每一行,都会调用此函数一次。所以你几乎不需要在这个函数中使用循环。尝试以下内容。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
    let findPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    let card = allCards[indexPath.row]
    cell?.textLabel?.text = card.name
    let savedFile = (findPath[0] + "/" + card.cardID + ".png")
    print(savedFile)
    let image = UIImage(contentsOfFile: savedFile)
    cell?.imageView?.image = image
    return cell!
}