2017-07-27 26 views
0

私はこのテーブルを実際にゆっくりとゆっくりと解決しようとしています。スローテーブルビュー(画像、Swift 3、コアデータ付きのカスタムセル)

Iは、データをフェッチするために、コアデータラッパ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 

     } 
    } 
} 
+0

をリロードする前に、あなたはこのような 'CoreData'からデータをフェッチするべきではない画像を取り込みます。 'cellForRowAt'で取り出すと、セルが再利用されるたびにデータがフェッチされます。あなたは 'UITableView'デリゲートチェーンの外側でデータを取得するほうがいいです。 'viewDidLoad'のようなものです。 – Ryan

答えて

0

これを解決する方法が2つあります

  1. asyncを使用してバックグラウンドでイメージを取得および設定します。

  2. は、テーブルビューのデータ

0

tone.imageは遅延フェッチを実行していますか?私はAERecordを使用していませんが、で遅延ロードの場合は高価な操作になる可能性があります。

メインスレッドがブロックされないようにバックグラウンドスレッドでフェッチを試みましたか?

私はこれを試してみたくなるだろう:

  1. はに上のバックジャンプ、バックグラウンドスレッド
  2. そのコールリターンでtone.imageを得るためにあなたのmwCellTableViewCell
  3. mwCellTableViewCell試行にtoneオブジェクトを渡しますメインスレッドとセットself.image = toneImage
関連する問題