2016-08-30 8 views
0

私は、検索結果を示すテーブルビューを持っています。それを検索するすべてのオブジェクトの配列、およびテーブルビューを供給する濾過オブジェクトの配列を有しています。 更新テーブルビューは

ユーザーが検索バーのテキストを変更

は、私はフィルタ配列を更新し、テーブルビューをリロードしてください。また、各セルは、テーブルビューのセルを更新する前に、キャッシュまたは非同期的にダウンロードされるか、サムネイルを持っています。

だから、テーブルビューのデータがリロードされる2つの場所がtableView.reloadData()を呼び出し、フィルタリング方法、であり、そして必要に応じて画像をダウンロードする場合は、メインスレッド上でself.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimationStyle: .None)を呼び出すcellForRowAtIndexPath、インチ

Soが私はあらゆる種類の問題を抱えてきました。私が得た3種類のエラー:

  • 致命的なエラー:インデックスが範囲外です。これは、ユーザーが検索テキストを変更したためcellForRowAtIndexPathは、それが空にされています後に配列からコンテンツを取得しようとしていたときに起こっているようです。テーブルビューと
  • エラー:セクション0に行34を挿入しようとして例えば、エラー私はこれが起こることを引き起こしているかわからないんだけど、私はテーブルビューがのために何のセクションを持っていないときに行を挿入しようとしていると思います配列が空です。
  • 内部矛盾例外:この問題が発生したとき、私はそれだけでクラッシュし、余分な情報を得ることはありません。だから、私はこの問題が何であるか分からない。

それでは、どのように私は、これらの問題を回避することができますか?私は今これらのエラーを取り除くために数日間努力してきましたが、何も試してみません。誰にもアイデアはありますか?ありがとう。 Redditの上の誰かに

+0

親切な問題へのより良い外観を取得するためのtableViewデリゲートのいくつかのコードを提供しています。 –

答えて

0

おかげで、私は答えを見つけました。

非同期にダウンロードしたサムネイルイメージを更新する前に、そのセルが同じインデックスパス(またはインデックスパス)で使用されているかどうかを確認する必要がありました。そのインデックスパスの行をセルのイメージビューのイメージに設定します。私はこれを作ったので

NSOperationQueue.mainQueue().addOperationWithBlock { 
    if indexPath == tableView.indexPathForCell(cell) { 
     cell.imageView?.image = downloadedThumbnail 
    } 
} 

:これまで

NSOperationQueue.mainQueue().addOperationWithBlock { 
    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None) 
} 

は基本的には、cellForRowAtIndexPathの内側に、ダウンロードした後、非同期的にそうするために必要な画像を決定した後、私はこの切り替え変更私はクラッシュを得ていない。

関連する問題