Frage

Folgende Schritte führen zu einem Absturz in NSFetchedResultsController.

  1. Ich versuche, das erste Element hinzufügen, um eine NSFetchedResultsController Tableview unterstützt.
  2. Ich erstelle ein temporäres MO-Objekt und ein Modal Ansichtsfenster angezeigt werden, um neues Objekt hinzuzufügen.
  3. Auf dem Add-Blatt (ein Modal-View-Controller), I drücke Taste Abbrechen, um das neue Element zu verwerfen.
  4. Im CancelAction Rückruf für Schaltfläche Abbrechen, ich die neue temporäre Objekt löschen I erstellt.
  5. Der Code bis hier ist genau ähnlich wie Apple-Beispielcode für Core Data. Der einzige zusätzliche Code, den ich habe, ist ein Aufruf an [Tableview reload], nachdem das Add Blatt des Feldes verwiesen.
  6. Die Crash-Ergebnisse nur dann, wenn ich versuche, das erste Element hinzuzufügen, da es zu falschem Abschnitt Zählung in NSFetchedResultsController verwendet ist.

Dies führt zu einem Absturz unten. Wenn ich redundanten Aufruf reload zu entfernen, ist der Absturz nicht sichtbar. Wenn ich einen reload Aufruf Rezept Beispielcode Daten hinzufügen, passiert der Absturz auch dort.

Ist es ein bekanntes Problem mit NSFetchedResultsController?

2009-09-13 18: 22: 45.600 Rezepte [14926: 20b] * Beenden app aufgrund nicht abgefangene Ausnahme 'NSRangeException', Grund: ‚* - [NSCFArray objectAtIndex:]: Index ( 0) über Grenzen (0)

War es hilfreich?

Lösung

Wie Sie selbst entdeckt, sollten Sie nicht verwenden [Tableview reload], weil Sie wahrscheinlich die NSFetchedResultsController Delegatmethoden verwenden

– controllerWillChangeContent:
– controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
– controller:didChangeSection:atIndex:forChangeType:
– controllerDidChangeContent:

Diese Methoden tatsächlich verantwortlich für Ihre Tabellenansicht zu aktualisieren, wenn Sie hinzufügen, löschen oder Objekte ändern. Deshalb, wenn Sie den Anruf [Tableview reload] hinzufügen, was passiert ist, dass zwei unterschiedliche Threads sowohl der Zugriff auf / Tisch-Ansicht zu ändern. Dies bewirkt, dass der Absturz Sie erleben.

Wenn Sie nicht die Delegatmethoden verwenden, dann der Absturz ist auf etwas anderes in Ihrem Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top