带有图像,Swift 3和核心数据的自定义单元格的慢速Tableview

时间:2017-07-27 21:32:47

标签: ios swift uitableview swift3

我正试图在桌子上解决这个非常缓慢,缓慢的滚动。

我使用核心数据包装器AERecord来获取数据,并且在没有cell.toneImage.image = UIImage(named: tone.image)

的情况下滚动平滑

图像不大(350 X 170)但是只要我滚动到足以加载新图像,def就会冻结一秒钟。

我在模拟器等中检查了混合图像。是否可以获取数据+同时加载图像?有什么想法或建议吗?

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! mwCellTableViewCell
    self.configureCell(cell, atIndexPath: indexPath)

    return cell
}

func configureCell(_ cell: mwCellTableViewCell, atIndexPath indexPath: IndexPath) {

    if let frc = fetchedResultsController {
        if let tone = frc.object(at: indexPath) as? Tone {
            // set data

            cell.toneTitle.text = tone.name.uppercased()

            let img:UIImage = tone.fav ? #imageLiteral(resourceName: "likeBtnOn") : #imageLiteral(resourceName: "likeBtnOff")
            cell.favButton.setImage(img, for: .normal)
            cell.favButton.tag = indexPath.row
            cell.favButton.addTarget(self, action: #selector(favme(_:)), for: .touchUpInside)


            cell.toneImage.image = UIImage(named: tone.image)
            cell.toneImage.layer.cornerRadius = 8.0
            cell.toneImage.clipsToBounds = true

        }
    }
}

2 个答案:

答案 0 :(得分:0)

tone.image是否正在进行懒惰抓取?我还没有使用AERecord,但是如果它的延迟加载,可能是一项昂贵的操作。

您是否尝试在后台线程上执行该获取,因此主线程未被阻止?

我很想尝试这个:

  1. tone对象传递到您的mwCellTableViewCell
  2. mwCellTableViewCell尝试在后台主题中获取tone.image
  3. 当该调用返回时,跳回主线程并设置self.image = toneImage

答案 1 :(得分:0)

解决这个问题有两种方法

  1. 使用async在后台获取并设置图像。

  2. 在重新加载Tableview数据之前获取图像