2016-10-15 25 views
1

コレクションビューでセルを選択/選択解除してから、保存/削除ボタンを押すことができます。コレクションビューで複数のセルを一度に削除する問題

私は行を選択していたとき、私は辞書

var selectedIndexes = Dictionary<IndexPath, String>() 

にそれらを追加し、私は、ユーザーのヒットを削除すると、私はselectedIndexesに[indexPath] = nilの

を設定する行の選択を解除したときに、私は実行

for index in selectedIndexes.keys { 
     indexesToDelete.append(index) 
    } 
    collectionView.deleteItems(at: indexesToDelete) 

これはselectedIndexes辞書に入るには、インデックスを掴み、「indexesToDeleteは、」インデックスの配列にそれらのインデックスを追加し、forloopが終わった後、私はdeletiよそのインデックス配列。私はこれを実行すると

は私が取得:

キャッチされない例外により「NSInternalInconsistencyException」、理由にアプリを終了:「無効な更新:既存のセクションに含まれる項目の番号の後にセクション0にあるアイテムの数が無効です。 update(5)は、更新(5)前にそのセクションに含まれるアイテムの数に、そのセクション(挿入された0、削除された2)から挿入または削除されたアイテムの数をプラスまたはマイナスし、項目はそのセクションの内外に移動しました(0は移動、0は移動)。

私はすべてを印刷しましたが、indexesToDeleteは私が削除しようとしているものの正しいインデックスです。私はエラーメッセージが何を言っているのか完全に理解していません。

答えて

1

コレクションビューはデータソースと同期していません。したがって、変更を反映させるためにデータソースとして使用しているものを更新し、deleteCellを呼び出す必要があります。

+0

私はちょうどその笑にハングアップしたとは思わない。ありがとう、時には新鮮な目のセットは、単純なものに神の贈り物です。 – user6820041

+0

全く問題ありません:)うれしいです!また、エラーメッセージはひどいです.haha –

0
for index in selectedIndexes.keys { 
     indexesToDelete.append(index) 
    } 
yourCollectionViewDataSourceArray.remove(at: index) 
collectionView.deleteItems(at: indexesToDelete) 

collectionViewデータソースがyourCollectionViewDataSourceArrayの場合、両方が一緒に同期されます。 collectionViewはデータを再読み込みするたびに、引数numberOfItemsInSectionを持つ関数を使用します。 array.countが削除後の項目の合計と異なることがわかった場合、このエラーが表示されます。 collectionViewをコードで更新するたびに、データ配列を更新する前に更新してください。希望が助けてくれる

+0

なぜこのコードが問題を解決するのか説明できれば助かります。 –

+0

collectionViewデータソースがyourCollectionViewDataSourceArrayの場合、両方とも一緒に同期されます。 collectionViewはデータを再読み込みするたびに、引数numberOfItemsInSectionを持つ関数を使用します。 array.countが削除後の項目の合計と異なることがわかった場合、このエラーが表示されます。 collectionViewをコードで更新するたびに、データ配列を更新する前に更新してください。希望が助けてくれる – Rami

+0

答えにあなたの説明を編集してください。 –

関連する問題