Кошмар с крахом executeBatchUpdates
Я сталкиваюсь с кошмаром крушения во времяperformBatchUpdates
наcollection view
.
Проблема в основном в следующем: у меня много изображений в каталоге на сервере. Я хочу показатьэскизы из этих файлов наcollection view
, Но эскиз должен быть загружен с сервераасинхронно, По прибытии они будут вставлены в представление коллекции, используя что-то вроде этого:
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 файлов на сервер. Приложение увидит новые файлы и начнет скачивать миниатюры. По мере загрузки эскизов они будут вставлены в представление коллекции. Но поскольку загрузка может занять разное время, и эта операция загрузкиasynchronous
В какой-то момент iOS потеряет счет того, сколько элементов в коллекции, и все это рухнет с этим катастрофическим позорным сообщением.
*** Завершение работы приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество элементов в разделе 0. Количество элементов, содержащихся в существующем разделе после обновления (213), должно быть равно количеству элементов содержится в этом разделе до обновления (154), плюс или минус количество элементов, вставленных или удаленных из этого раздела (40 вставлено, 0 удалено) и плюс или минус количество элементов, перемещенных в или из этого раздела (0 перемещено в 0 переехал).
Доказательством того, что у меня есть что-то подозрительное, является то, что если я распечатываю количество элементов в наборе данных, я вижу ровно 213. Таким образом, набор данных соответствует правильному номеру, и сообщение является бессмысленным.
У меня была эта проблема раньше,Вот но это был проект iOS 7. Каким-то образом проблема вернулась теперь на iOS 8, и решения там не работают, и теперь набор данныхВ СИНХРОНИЗАЦИИ.