Meine iOS-App verwendet Kerndaten über mehrere Threads. Ich erhalte einige Absturzberichte mit der folgenden Meldung: "'NSObjectInaccessibleException', Grund: 'CoreData konnte keinen Fehler für' 0x1e07a9b0 ''
erfüllenIch verstehe, was dieses Problem verursacht - dass das Objekt gelöscht wurde, aber ein anderer Thread versucht, darauf zuzugreifen. Ich arbeite, um das Problem zu lösen, aber ich möchte eine Überprüfung in den Hintergrund-Thread hinzufügen, um zu sehen, ob das Objekt auf diese Weise einen Fehler verursacht.
Mein Code bezieht sich momentan auf myObject.myValue
. Ist es möglich, etwas zu überprüfen, wie zum Beispiel:
... damit es aus der Methode herauskommt, bevor man irgendetwas tut, das einen solchen Absturz verursachen könnte? Oder ruft man einfach myObject.myValue
auf, um zu sehen, ob es null ist, weil eine solche Ausnahme ausgelöst wird?
Sie könnten versuchen, existingObjectWithID:error:
:
Gibt das Objekt für die angegebene ID zurück.
%Vor%Diskussion
Wenn ein verwaltetes Objekt mit der angegebenen ID bereits im Kontext registriert ist, wird dieses Objekt direkt zurückgegeben. Andernfalls wird das entsprechende Objekt in den Kontext einbezogen.
Diese Methode führt möglicherweise E / A durch, wenn die Daten nicht zwischengespeichert sind.
Im Gegensatz zu objectWithID: gibt diese Methode keinen Fehler zurück.
Sie könnten dO:
%Vor%Sie sollten überprüfen, ob das Objekt existiert, bevor Sie auf seine Variablen zugreifen, wenn Probleme auftreten, bei denen das Objekt in einem anderen Thread gelöscht werden kann.
Zwei Methoden:
NSManagedObjectContextObjectsDidChangeNotification
-Benachrichtigung anmelden und dann die userInfo
für diese Benachrichtigung analysieren, um zu sehen, welches Objekt gelöscht wurde. Beispiel:
%Vor% Sie können [myObject isFault]
überprüfen, wobei myObject
eine NSManagedObject
-instanz
Tags und Links multithreading ios core-data crash nsmanagedobject