Ich habe eine Kerndaten-App mit zwei Ansichten. Die erste Ansicht listet "Räume" auf, die zweite Liste "Szenen" in Räumen. Die Rooms-Seite verfügt über eine NavItem-Schaltfläche zum Bearbeiten, die, wenn sie gedrückt wird, eine NavItem-Schaltfläche hinzufügt. Sie können Räume von hier löschen und hinzufügen. Hinzugefügte Räume erscheinen einfach mit einem Standardnamen "Neuer Raum" in der Tabelle. Die zweite Ansicht ist eine Liste von Szenen im ausgewählten Raum. Gleiches gilt hier, Sie können Szenen löschen und hinzufügen, und hinzugefügte Szenen erscheinen einfach in der Tabelle mit dem Namen "Neue Szene". Nichts besonderes wirklich.
Ich verwende FetchedResultsController
in beiden View-Controllern, wobei die Szenen mit NSPredicate
nur Szenen aus dem ausgewählten Raum zurückgeben. Ich verwende auch die Delegiertenmethoden controllerWillChangeContent
, controllerDidChangeContent
usw. für die Aktualisierungen der Tabellenansicht.
Dies funktioniert zuerst gut, aber normalerweise nach dem Navigieren in Räumen und Szenen und dem Versuch, eine Szene zu löschen, stürzt sie ab. Es wird unweigerlich zum Absturz bringen, wenn Sie lange genug damit spielen. Es passiert nur beim Löschen einer Szene. Wenn Sie die Bearbeitungsschaltfläche drücken und eine Szene löschen und es funktioniert, funktionieren alle folgenden Löschungen in dieser Bearbeitungssitzung immer. Es wird immer nur beim ersten Löschen der Editiersitzung abstürzen.
Der Fehler, den ich bekomme, ist ein seltsamer:
Beenden der App aufgrund einer nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '- [__ NSCFType controllerWillChangeContent:]: nicht erkannter Selektor, der an die Instanz gesendet wurde 0x5e02d70 '
Der erste Teil dieses Fehlers ändert sich manchmal. Manchmal ist es __NSCFType
, manchmal ist es CALayer
. Dieser Fehler tritt nur beim Löschen von Szenen auf. Hinzufügen von Szenen ist in Ordnung 100%.
Ich habe einen anderen Beitrag zu stackoverflow gelesen, der darauf hinweist, dass diese Art von Fehlern durch Speicherverwaltungsprobleme verursacht werden kann. Ich habe den Code zweimal überprüft und mit dem Leckinstrument durch die Instrumente geleitet. Es gibt keine Lecks.
Gibt es noch etwas, das ich überprüfen kann? Irgendwelche Ideen?
Hier ist der relevante Code ..
Von ScenesTableViewController.m:
%Vor% Dieser Fehler stammt höchstwahrscheinlich von NSFetchedResultsController
mit einem freigegebenen Delegaten. Haben Sie eine UIViewController
, die Sie freigegeben haben, und die zugehörige NSFetchedResultsController
nicht freigegeben?
Selbst ich hatte das gleiche Problem. Aber für iOS 4.2 ist das Problem, dass NSError
initialisiert ist, so dass es als Müll behandelt wird und beim Aktualisieren / Einfügen haben wir
Also im Speicher behandelt das iOS den Fehler als Müll und so die Ausnahme. Versuchen Sie, es auf Null zu initialisieren. Es hat mein Problem gelöst. Das Problem tritt nur bei 4.2iOS auf.
Tags und Links iphone ios core-data nsfetchedresultscontroller