2016-07-10 4 views
0

ユーザーがtextFieldに新しい文字を入力し、検索結果をユーザーに動的に表示するたびにサーバー要求を実行するtextFieldがあります。これらはsearch_resultsアレイに格納されています。また、次の行のコードを配列上で実行して、値が2回発生するかどうかを判断します。バックグラウンドスレッドの変数が変化し、インデックスが境界を超えてしまいます。swift ios

let duplicate_array = (search_results.filter{ $0.name == search_results[indexPath.row].name }) 

問題は、私はすぐに十分に入力すると、search_results配列は、バックグラウンドスレッドから更新されていることで、indexPath.rowは、もはや更新search_resultsの大きさに収まるように私は、このコードにindexOutOfBounds例外を取得していません。これが起こらないようにする方法はありますか?検索クエリの実行が既に遅れており、最大で0.3秒ごとに実行されるようにしました。これ以上の頻度は実行されません。search_resultsのサイズが大きい場合は時折発生します。

答えて

0

説明したように、インデックスの範囲外は、indexPath.rowが更新されたsearch_resultsのサイズに適合しなくなったために発生します。

search_results.countindexPath.rowより大きいかどうかを確認することでこれを防ぐことができます。 indexPath.rowより大きい場合は、UICollectionViewを使用している場合はcollectionView.reloadData()を呼び出して結果の再読み込みをトリガーします。 (search_results[indexPath.row]

にアクセスしていない
関連する問題