Core Data App stürzt ab mit "controllerWillChangeContent: unerkannter Selektor an Instanz gesendet"

7

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%     
Max Clarke 20.08.2010, 16:29
quelle

2 Antworten

28

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?

    
Marcus S. Zarra 20.08.2010, 17:00
quelle
1

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

%Vor%

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.

    
Trupti 02.03.2011 12:14
quelle