Wie löse ich diesen CollectionView-Absturz?

Meine App hat zweiCollectionViewControllers. Es ist immer nur einer sichtbar.

Ich habe auf dem Storyboard die folgende Struktur erstellt: zwei Containeransichten übereinander. Jede Containeransicht hat einCollectionViewController eingebettet. Die Sichtbarkeit einer bestimmten Containeransicht bestimmt, welcher collectionViewController sichtbar ist.

Das ist das Problem. BeideCollectionViewControllers empfangen Daten parallel, aber iOS hat einen Fehler, der die App zum Absturz bringt, wenn ein CollectionViewController versucht, eine Einfügung mit @ auszuführeperformBatchUpdates während es unsichtbar ist.

m dies zu verhindern, habe ich auf beiden Seiten ein BOOL-Flag erstellCollectionViewControllers, damit sie wissen, ob sie sichtbar sind und das @ ausführen oder nicperformBatchUpdates. Etwas wie

if (self.isThisCollectionViewVisible == NO) return;

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

Dies löst einen Teil des Problems. Die App stürzt jedoch weiterhin ab, wenn ich auf die Schaltfläche tippe, um zum unsichtbaren @ zu wechselCollectionViewController sichtbar machen, während Updates empfangen werden.

Ich meine das: Lass uns @ anrufA Der ErsteCollectionViewController undB der zweite.A ist sichtbar undB ist zu diesem Zeitpunkt nicht sichtbar.B empfängt Daten und versucht ein @ zu machperformBatchUpdates aber da es unsichtbar ist, wird dasif (self.isThisCollectionViewVisible == NO) return; verhindertperformBatchUpdates zu laufen, was ist in Ordnung. Jetzt mache ichA unsichtbar undB sichtbar. An dieser Stelle wird die Flaggeself.isThisCollectionViewVisible ist eingestellt aufYES undperformBatchUpdates bringt die App mit diesem Fehler zum Absturz:

* Assertionsfehler in - [CollectionView _endItemAnimationsWithInvalidationContext: tentionallyForReordering:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.7/UICollectionView.m:4625 * Beenden der App aufgrund einer nicht erfassten Ausnahme 'NSInternalInconsistencyException', Grund: 'Ungültige Aktualisierung: Ungültige Anzahl von Elementen in Abschnitt 0. Die Anzahl der Elemente in einem vorhandenen Abschnitt nach der Aktualisierung (76) muss der Anzahl der Elemente in entsprechen dieser Abschnitt vor der Aktualisierung (70) plus oder minus der Anzahl der in diesen Abschnitt eingefügten oder gelöschten Elemente (5 eingefügten, 2 gelöschten) und plus oder minus der Anzahl der in diesen Abschnitt eingefügten oder herausgezogenen Elemente (0 eingefügten, 0 eingefügten Elemente) ausgezogen).'

Ich denke derCollectionViewController ist wirklich noch nicht fertig und aktualisiert, um ein @ machen zu könnperformBatchUpdates ... und dies bedeutet nicht, dass die Datenquelle zuvor nicht aktualisiert wurde, da sie gerade aktualisiert wird.

Was kann ich tun, um dies zu verhindern?

HINWEIS: Ich habe etwas Merkwürdiges an diesem Absturz bemerkt. Es heißt, dass 5 Elemente eingefügt und 2 gelöscht werden, aber tatsächlich werden 3 Elemente eingefügt, 0 gelöscht und 2 geändert, wenn die Abstürze auftreten.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage