iOS8 Swift: deleteRowsAtIndexPaths stürzt ab

8

Ich habe Probleme mit dem Löschen einer Zeile aus meinem TableView in Swift, iOS 8, Xcode 6 Beta 6. Jedes Mal, wenn ich versuche, eine Zeile zu löschen, erhalte ich einen Fehler in den Zeilen von

  

Assertionsfehler in - [UITableView _endCellAnimationsWithContext:],   /SourceCache/UIKit_Sim/UIKit-3302.3.1/UITableView.m:1581 2014-08-30   20: 31: 00.971 Klassenverzeichnis [13290: 3241692] *** App beenden wegen   Uncaught-Ausnahme 'NSInternalInconsistencyException', Grund:   'Ungültiges Update: ungültige Anzahl von Zeilen in Abschnitt 1. Die Anzahl von   Zeilen, die in einem vorhandenen Abschnitt nach dem Update (25) enthalten sein müssen   gleich der Anzahl der Zeilen in diesem Abschnitt vor der   update (25), plus oder minus der Anzahl der eingefügten oder gelöschten Zeilen   dieser Abschnitt (0 eingefügt, 1 gelöscht) und plus oder minus der Anzahl von   Zeilen, die in diesen Abschnitt hinein oder aus ihm heraus verschoben wurden (0 eingezogen, 0 ausgezogen).

Ich habe hier alle Antworten auf dieses häufige Problem gelesen und habe das Gefühl, dass ich die empfohlenen Bedingungen erfüllt habe. Der Artikel scheint aus dem Datenmodell entfernt zu werden - - Wenn ich die App neu lade, ist das gelöschte Objekt aus der Tabelle verschwunden - aber es scheint einige Reste in der entsprechenden SQLite-Datei zu geben und die Mathematik addiert sich natürlich nicht. Der println, der den indexPath ausspuckt, zeigt den richtigen Abschnitt und die richtige Zeile an. Ich bin sehr verwirrt. Das sollte einfach sein, aber mir fehlt etwas Dummes, da bin ich mir sicher, ich vermute im Datenmodell die Löschung. Volles Projekt auf Github .

%Vor%     
Nate Birkholz 31.08.2014, 03:49
quelle

2 Antworten

6

Es ist einfach, Ihren Absturz mit einem Xcode Core Data Master-Detail-Vorlagenprojekt zu reproduzieren. Wenn Sie NSFetchedResultsController verwenden, sollten Sie in der Regel NSFetchedResultsControllerDelegate verwenden (Sie haben es deklariert, aber nicht verwendet).

Löschen Sie diese Zeilen in Ihrer tableView:commitEditingStyle:forRowAtIndexPath: -Methode:

%Vor%

Fügen Sie diese Zeilen Ihrer viewController-Klasse hinzu:

%Vor%

Dies sollte Ihr Problem beheben.

    
Imanou Petit 31.08.2014, 06:29
quelle
3

Ich glaube, das ist einfach ein Caching-Problem. Ihr fetchedResultController lädt Ihre Ergebnisse nicht automatisch neu, wenn die Ergebnisse zwischengespeichert werden. Das bedeutet, dass, wenn tableView:numberOfRowsInSection: erneut aufgerufen wird, die Ergebniszählung immer noch 25 zurückgibt, obwohl Sie ein Element gelöscht haben.

    
drewag 31.08.2014 06:19
quelle

Tags und Links