NSObjectInaccessibleException ', Grund:' CoreData konnte keinen Fehler ausführen

7

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üllen

Ich 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:

%Vor%

... 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?

    
Jason 12.01.2013, 19:04
quelle

4 Antworten

19

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%     
sergio 12.01.2013 20:36
quelle
5

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:

  1. Aktualisieren Sie die Ansichtsdatenquellen immer dann, wenn Ihre Daten gelöscht werden. Sie können dies tun, indem Sie sich für die NSManagedObjectContextObjectsDidChangeNotification -Benachrichtigung anmelden und dann die userInfo für diese Benachrichtigung analysieren, um zu sehen, welches Objekt gelöscht wurde.
  2. Verwenden Sie einen ähnlichen Code, wenn Sie Daten an mehrere Threads weiterleiten.

Beispiel:

%Vor%     
iwasrobbed 12.03.2013 12:58
quelle
2

Sie können prüfen, ob NSManagedContext existiert, wenn Sie NSManagedObject verwenden. so:

%Vor%     
cleexiang 06.08.2015 02:03
quelle
0

Sie können [myObject isFault] überprüfen, wobei myObject eine NSManagedObject -instanz

ist     
Mert Buran 02.02.2015 14:25
quelle