Fehler 'Ungültige Aktualisierung: ungültige Anzahl von Zeilen in Abschnitt 0' versucht Zeile in Tabelle zu löschen

9

Mein Code scheint gut zu laufen, aber wenn ich wische, um eine Zeile in meinem UITableView zu löschen, stürzt die App mit folgendem ab:

Fehler

  

LittleToDoApp [70390: 4116002] *** Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInternalInconsistencyException', Grund: 'Ungültiges Update: ungültige Anzahl von Zeilen in Abschnitt 0. Die Anzahl der Zeilen in einem vorhandenen Abschnitt nach der Aktualisierung (1 ) muss gleich der Anzahl der Zeilen in diesem Abschnitt vor der Aktualisierung sein (1), plus oder minus der Anzahl der Zeilen eingefügt oder gelöscht aus diesem Abschnitt (0 eingefügt, 1 gelöscht) und plus oder minus der Anzahl der Zeilen in bewegt oder aus diesem Abschnitt (0 ist eingezogen, 0 ausgezogen). "

ViewController.m

%Vor%

ToDoItemSvc.h

%Vor%

Vollständige Quelle

Ссылка

Bearbeiten

Sollte ich nach den Kommentaren von Fennelouski etwas in dieser Richtung haben?

%Vor%

Bearbeiten 2

Das ist was ich bekomme:

Ссылка

    
Marty 28.05.2015, 20:57
quelle

2 Antworten

14

Die Anzahl der Zeilen in Ihrer Tabelle ist [[ToDoItemSvc retrieveAllToDoItems] count] . Wenn Sie 1 row in Ihrer Tabelle löschen, sollte die Anzahl der Zeilen in Ihrer Tabelle 1 kleiner als die Anzahl der Zeilen sein, bevor Zeilen gelöscht werden. Nachdem Sie 1 row gelöscht und [self.tableView reloadData] aufgerufen haben, überprüft das tableView, wie viele Zeilen es in der Tabelle gibt. An diesem Punkt gibt numberOfRowsInSection [[ToDoItemSvc retrieveAllToDoItems] count] zurück. Dies sollte jetzt 1 weniger als vor dem Löschen einer Zeile sein.

Die kurze Antwort ist, dass Sie zuerst ein Element aus Ihrer dataSource entfernen müssen, das scheint [ToDoItemSvc retrieveAllToDoItems] zu sein, dann löschen Sie eine Zeile.

Das Kompliment dazu ist, wenn Sie eine Zeile hinzufügen, müssen Sie auch ein Element zu Ihrer dataSource hinzufügen.

Diese Änderungen müssen durchgeführt werden, bevor Sie reloadData aufrufen.

Bearbeiten

%Vor%

ELI5: Ein Lehrer hat fünf Schüler: Alice, Bob, Charlie, Diane und Eric. Bobs Mutter holt ihn früh von der Schule vor dem Mittagessen ab. Nach dem Mittagessen nimmt der Lehrer Anwesenheit und Panik, weil er nur vier Kinder hat, wenn die Liste sagt, dass es fünf geben sollte. Wo ist Bob ?!

Wenn Bobs Mutter seinen Namen von der Liste gestrichen hätte, als sie ihn aus der Schule genommen hat, wäre der Lehrer nicht in Panik geraten.

    
Fennelouski 28.05.2015, 21:15
quelle
2

Ich habe es mit Hilfe von oben und etwas Nachdenken herausgefunden.

Zuerst habe ich den eigentlichen deleteToDoItem Code

abgeschlossen %Vor%

Dann den obigen Code

%Vor%

Dies läuft und erlaubt mir, meinen Artikel zu löschen, wie ich will !!

    
Marty 29.05.2015 03:39
quelle

Tags und Links