私はコレクションビューでperformBatchUpdates中にクラッシュの悪夢に直面しています。performBatchUpdatesクラッシュでナイトメア
問題は基本的には次のとおりです。サーバー上のディレクトリに多数の画像があります。これらのファイルのサムネイルをコレクションビューに表示したいと思います。ただし、サムネイルはサーバーから非同期でダウンロードする必要があります。彼らが到着すると、次のようなものを使用してコレクションビューに挿入されます。
dispatch_async(dispatch_get_main_queue(),
^{
[self.collectionView performBatchUpdates:^{
if (removedIndexes && [removedIndexes count] > 0) {
[self.collectionView deleteItemsAtIndexPaths:removedIndexes];
}
if (changedIndexes && [changedIndexes count] > 0) {
[self.collectionView reloadItemsAtIndexPaths:changedIndexes];
}
if (insertedIndexes && [insertedIndexes count] > 0) {
[self.collectionView insertItemsAtIndexPaths:insertedIndexes];
}
} completion:nil];
});
問題はこれです(私は思う)。時刻= 0でコレクションビューに10個のアイテムがあるとします。私は100のファイルをサーバーに追加します。アプリケーションで新しいファイルが表示され、サムネールのダウンロードが開始されます。サムネイルがダウンロードされると、コレクションビューに挿入されます。しかし、ダウンロードには異なる時間がかかる可能性があり、このダウンロード操作は非同期であるため、iOSはコレクションの要素数を失い、この致命的な悪名高いメッセージですべてがクラッシュします。
***によりキャッチされない例外「NSInternalInconsistencyException」、理由にアプリを終了:「無効な更新:セクション0の項目の無効 数更新後 既存のセクションに含まれる項目の数(213)更新前のそのセクションに含まれている アイテムの数(154)、そのセクションに挿入または削除されたアイテムの数(40 が挿入され、0が削除された)、プラスまたはマイナス 、プラスまたはマイナスのアイテム数 に移動したか、そのセクションから移動しました(0は移動し、0は移動しました)。
私がデータセットの項目の数を印刷すると、正確に213が表示されます。つまり、データセットが正しい数字に一致し、メッセージがナンセンスです。
私はhereの前にこの問題を抱えていましたが、それはiOS 7プロジェクトでした。何とか今問題がiOS 8に戻ってしまって、ソリューションが動作しなくなり、データセットがSYNCにあるようになりました。
私は同じ問題に直面しています。私はあなたの解決策を試みます。 – vmeyer