Sono di fronte a un incubo di un arresto anomalo durante performBatchUpdates su una vista di raccolta.Nightmare with performBatchUpdates crash
Il problema è fondamentalmente questo: ho un sacco di immagini su una directory su un server. Voglio mostrare le miniature di quei file in una vista insieme. Ma la miniatura deve essere scaricata dal server in modo asincrono. All'arrivo verranno inseriti nella vista insieme utilizzando qualcosa come:
dispatch_async(dispatch_get_main_queue(),
^{
[self.collectionView performBatchUpdates:^{
if (removedIndexes && [removedIndexes count] > 0) {
[self.collectionView deleteItemsAtIndexPaths:removedIndexes];
}
if (changedIndexes && [changedIndexes count] > 0) {
[self.collectionView reloadItemsAtIndexPaths:changedIndexes];
}
if (insertedIndexes && [insertedIndexes count] > 0) {
[self.collectionView insertItemsAtIndexPaths:insertedIndexes];
}
} completion:nil];
});
il problema è questo (penso). Supponiamo che a tempo = 0, la vista di raccolta abbia 10 elementi. Quindi aggiungo altri 100 file al server. L'applicazione vede i nuovi file e inizia a scaricare le miniature. Mentre le miniature vengono scaricate, verranno inserite nella vista raccolta. Ma poiché i download possono richiedere tempi diversi e questa operazione di download è asincrona, ad un certo punto iOS non tiene traccia del numero di elementi della raccolta e dell'intera cosa si bloccherà con questo messaggio infame catastrofico.
*** terminazione app causa eccezione non identificata 'NSInternalInconsistencyException', ragione: 'aggiornamento non valido: valido numero di elementi nella sezione 0. Il numero di elementi contenuti in una sezione esistente dopo l'aggiornamento (213) deve essere uguale al numero di articoli contenuti in quella sezione prima dell'aggiornamento (154), più o meno il numero di elementi inseriti o cancellati da quella sezione (40 inseriti, 0 cancellati) e più o meno il numero di elementi spostato in o fuori da quella sezione (0 spostato in, 0 spostato fuori). '
La prova che ho qualcosa di strano sta succedendo è che se stampo il conteggio degli elementi sul set di dati che vedo esattamente 213. Così, il set di dati corrisponde al numero corretto e il messaggio è una sciocchezza.
Ho avuto questo problema prima, here ma quello era un progetto iOS 7. In qualche modo il problema è tornato ora su iOS 8 e le soluzioni non funzionano e ora il set di dati IS IN SYNC.
sto affrontando lo stesso problema. Proverò la tua soluzione. – vmeyer