My app has two `CollectionViewController`s. Only one is visible at a given time.

I have created the following structure on storyboard: two container views on top of each other. Every container view has a `CollectionViewController` embedded. The visibility of a particular container view determines which collectionViewController is visible.

This is the problem. Both `CollectionViewController`s are receiving data in parallel but iOS has a bug that will make the app crash if one CollectionViewController tries to execute an insert using `performBatchUpdates` while it is invisible.

Trying to prevent that, I have created a BOOL flag on both `CollectionViewController`s so they can know if they are visible and execute or not the `performBatchUpdates`. Something like:

```
if (self.isThisCollectionViewVisible == NO) return;

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

```

This solves part of the problem. But the app continues to crash on the following condition: if I tap the button to switch to the invisible `CollectionViewController` making it visible while it is receiving updates.

I mean this: lets call `A` the first `CollectionViewController` and `B` the second one. `A` is visible and `B` is invisible at this point. `B` starts receiving data and is trying to do a `performBatchUpdates` but as it is invisible, the `if (self.isThisCollectionViewVisible == NO) return;` is preventing `performBatchUpdates` to run, what is fine. Now I make `A` invisible and `B` visible. At this point the flag `self.isThisCollectionViewVisible` is set to `YES` and `performBatchUpdates` makes the app crash with this error:

> 
> **\* Assertion failure in -[CollectionView \_endItemAnimationsWithInvalidationContext:tentativelyForReordering:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.7/UICollectionView.m:4625
>  \*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid
>  number of items in section 0. The number of items contained in an
>  existing section after the update (76) must be equal to the number of
>  items contained in that section before the update (70), plus or minus
>  the number of items inserted or deleted from that section (5 inserted,
>  2 deleted) and plus or minus the number of items moved into or out of
>  that section (0 moved in, 0 moved out).'
> 
> 
> 

I think the `CollectionViewController` is really not yet ready and updated to be able to do a `performBatchUpdates`... and this is not a matter of not updating the data source previously because it is being updated.

What checks can I do to prevent that from happening?

NOTE: I noticed something strange about this crash in particular. It says that 5 elements are being inserted and 2 deleted but in fact 3 elements are being inserted, 0 deleted and 2 changed when the crashes happen.