Como resolver esta falha do CollectionView?

Meu aplicativo tem doisCollectionViewControllers. Apenas um é visível em um determinado momento.

Eu criei a seguinte estrutura no storyboard: duas visualizações de contêineres umas sobre as outras. Toda visualização de contêiner possui umCollectionViewController embutido. A visibilidade de uma visualização de contêiner específica determina qual collectionViewController está visível.

Este é o problema. AmbosCollectionViewControllers estão recebendo dados em paralelo, mas o iOS possui um erro que causará o travamento do aplicativo se um CollectionViewController tentar executar uma inserção usandoperformBatchUpdates enquanto é invisível.

Tentando evitar isso, criei uma bandeira BOOL nos doisCollectionViewControllers para que eles possam saber se estão visíveis e executar ou não operformBatchUpdates. Algo como:

if (self.isThisCollectionViewVisible == NO) return;

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

Isso resolve parte do problema. Mas o aplicativo continua a travar na seguinte condição: se eu tocar no botão para alternar para o invisívelCollectionViewController tornando-o visível enquanto recebe atualizações.

Quero dizer o seguinte: vamos ligarA o primeiroCollectionViewController eB o segundo.A é visível eB é invisível neste momento.B começa a receber dados e está tentando fazer umaperformBatchUpdates mas como é invisível, oif (self.isThisCollectionViewVisible == NO) return; está impedindoperformBatchUpdates para correr, o que é bom. Agora eu façoA invisível eB visível. Neste ponto, a bandeiraself.isThisCollectionViewVisible está configurado paraYES eperformBatchUpdates faz com que o aplicativo falhe com este erro:

* Falha de declaração em - [CollectionView _endItemAnimationsWithInvalidationContext: tentativelyForReordering:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.7/UICollectionView.m:4625 * Finalizando o aplicativo devido à exceção não capturada 'NSInternalInconsistencyException', motivo: 'Atualização inválida: número inválido de itens na seção 0. O número de itens contidos em uma seção existente após a atualização (76) deve ser igual ao número de itens contidos nessa seção antes da atualização (70), mais ou menos o número de itens inseridos ou excluídos dessa seção (5 inseridos, 2 excluídos) e mais ou menos o número de itens movidos para dentro ou para fora dessa seção (0 movido, 0 movido Fora).'

Eu acho que oCollectionViewController ainda não está pronto e atualizado para poder fazer umaperformBatchUpdates... e não se trata de não atualizar a fonte de dados anteriormente porque está sendo atualizada.

Que verificações posso fazer para impedir que isso aconteça?

NOTA: notei algo estranho sobre esse acidente em particular. Ele diz que 5 elementos estão sendo inseridos e 2 excluídos, mas de fato 3 estão sendo inseridos, 0 excluído e 2 alterados quando ocorrem as falhas.

questionAnswers(3)

yourAnswerToTheQuestion