¿Cómo resolver este bloqueo de CollectionView?

Mi aplicación tiene dosCollectionViewControllers. Solo uno es visible en un momento dado.

He creado la siguiente estructura en el guión gráfico: dos vistas de contenedor una encima de la otra. Cada vista de contenedor tiene unCollectionViewController incrustado. La visibilidad de una vista de contenedor particular determina qué collectionViewController es visible.

Este es el problema. AmbosCollectionViewControllers están recibiendo datos en paralelo, pero iOS tiene un error que hará que la aplicación se bloquee si un CollectionViewController intenta ejecutar una inserción usandoperformBatchUpdates mientras es invisible

Intentando evitar eso, he creado una bandera BOOL en ambosCollectionViewControllers para que puedan saber si son visibles y ejecutar o noperformBatchUpdates. Algo como:

if (self.isThisCollectionViewVisible == NO) return;

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

Esto resuelve parte del problema. Pero la aplicación continúa fallando en la siguiente condición: si toco el botón para cambiar a lo invisibleCollectionViewController haciéndolo visible mientras recibe actualizaciones.

Quiero decir esto: llamemosA el primeroCollectionViewController yB el segundo.A es visible yB Es invisible en este punto.B comienza a recibir datos y está tratando de hacer unperformBatchUpdates pero como es invisible, elif (self.isThisCollectionViewVisible == NO) return; está previniendoperformBatchUpdates correr, lo que está bien. Ahora hagoA invisible yB visible. En este punto la banderaself.isThisCollectionViewVisible se establece enYES yperformBatchUpdates hace que la aplicación se bloquee con este error:

* Error de aserción en - [CollectionView _endItemAnimationsWithInvalidationContext: tentativelyForReordering:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.7/UICollectionView.m:4625 * Finalización de la aplicación debido a la excepción no detectada 'NSInternalInconsistencyException', razón: 'Actualización no válida: número no válido de elementos en la sección 0. El número de elementos contenidos en una sección existente después de la actualización (76) debe ser igual al número de elementos contenidos en ese sección antes de la actualización (70), más o menos el número de elementos insertados o eliminados de esa sección (5 insertados, 2 eliminados) y más o menos el número de elementos movidos dentro o fuera de esa sección (0 movidos, 0 movidos fuera).'

Pienso que elCollectionViewController Realmente aún no está listo y actualizado para poder hacer unperformBatchUpdates... y no se trata de no actualizar la fuente de datos previamente porque se está actualizando.

¿Qué controles puedo hacer para evitar que eso suceda?

NOTA: Noté algo extraño sobre este bloqueo en particular. Dice que se están insertando 5 elementos y se eliminan 2, pero de hecho se insertan 3 elementos, se eliminan 0 y se cambian 2 cuando ocurren los bloqueos.

Respuestas a la pregunta(3)

Su respuesta a la pregunta