Как решить эту ошибку CollectionView?

Мое приложение имеет дваCollectionViewControllers. Только один виден в данный момент.

Я создал следующую структуру на раскадровке: два вида контейнера друг на друга. Каждый вид контейнера имеетCollectionViewController встроенный. Видимость конкретного контейнерного представления определяет, какая коллекцияViewViewController является видимой.

Это проблема. И то и другоеCollectionViewControllerОни получают данные параллельно, но в iOS есть ошибка, которая приводит к сбою приложения, если один CollectionViewController пытается выполнить вставку, используяperformBatchUpdates пока он невидим

Пытаясь предотвратить это, я создал флаг BOOL на обоихCollectionViewControllers, чтобы они могли знать, если они видны и выполнять или нетperformBatchUpdates, Что-то вроде:

if (self.isThisCollectionViewVisible == NO) return;

[self.collectionView performBatchUpdates:^{
   // bla bla... perform insert,m remove...

Это решает часть проблемы. Но приложение продолжает падать при следующем условии: если я нажму кнопку, чтобы переключиться на невидимоеCollectionViewController сделать его видимым, пока он получает обновления.

Я имею в виду это: давайте позвонимA первыйCollectionViewController а такжеB второй.A виден иB невидим в этой точке.B начинает получать данные и пытается сделатьperformBatchUpdates но, как это невидимо,if (self.isThisCollectionViewVisible == NO) return; предотвращаетperformBatchUpdates бежать, что нормально. Теперь я делаюA невидимый иB видимый. На данный момент флагself.isThisCollectionViewVisible установлен вYES а такжеperformBatchUpdates вызывает сбой приложения с этой ошибкой:

* Ошибка подтверждения в - [CollectionView _endItemAnimationsWithInvalidationContext: ориентировочноForReordering:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.7/UICollectionView.m:4625 * Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество элементов в разделе 0. Количество элементов, содержащихся в существующем разделе после обновления (76), должно быть равно количеству элементов, содержащихся в этом раздел перед обновлением (70), плюс или минус количество элементов, вставленных или удаленных из этого раздела (5 вставлено, 2 удалено) и плюс или минус количество элементов, перемещенных в или из этого раздела (0 перемещено, 0 перемещено из).'

я думаюCollectionViewController на самом деле еще не готов и обновлен, чтобы иметь возможность сделатьperformBatchUpdates... и дело не в том, чтобы ранее не обновлять источник данных, потому что он обновляется.

Какие проверки я могу сделать, чтобы этого не случилось?

ПРИМЕЧАНИЕ: я заметил что-то странное в этой аварии, в частности. В нем говорится, что 5 элементов вставляются и 2 удаляются, но на самом деле 3 элемента вставляются, 0 удаляются и 2 изменяются при возникновении сбоев.

Ответы на вопрос(3)

Ваш ответ на вопрос