2016-03-24 8 views
0

Ich habe ein merkwürdiges Verhalten beim Löschen von Objekten aus einem neuen untergeordneten Kontext.Löschen von Objekt aus dem neuen untergeordneten Kontext

Ich habe einen Managed Object Context mit der Hauptwarteschlange. Ich hole eine Liste von Objekten daraus. Ich erstelle den neuen Kontext mit einer privaten Warteschlange. Ich legte seinen Elternteil als Hauptkontext ein.

Natürlich kann ich nicht versuchen, die Objekte aus der Liste im untergeordneten Kontext direkt zu löschen. Also habe ich existingObjectWithID verwendet: um eine Liste von "äquivalenten" Objekten aus dem Kindkontext zu erstellen. Core Data sagt mir, er kann nicht die Objekte finden:

Fehlerdomäne: NSCocoaErrorDomain Code: 133000

versuchen, ein Objekt nicht im Speicher gefunden zuzugreifen.

Keine weiteren Fehler Info

Und natürlich, ich kann sie nicht gelöscht werden.

Jetzt, wenn ich die Liste der Objekte im Kind-Kontext abrufen, werden sie gefunden und ich kann sie löschen (aber das wäre Betrug, ich soll nicht wissen, wie man diese Liste holt).

Was ist der Trick ??? Ist nicht existingObjectWithID: soll vom übergeordneten Kontext abgerufen werden, wenn sich Objekte (noch) nicht im Child-Kontext befinden?

+0

mainQueueContext angehängt ** direkt ** an 'NSPersistentStoreCoordinator' (schlechte Idee). ** Es gibt keinen Trick. ** Siehe eine ähnliche Frage hier: [link] (http://stackoverflow.com/questions/22511745/cannot-retrieve-temporary-object-in-child-context-with-existingobjectwithiderro). – Khundragpan

+0

Danke. Die Verbindung beschreibt tatsächlich vollständig das Problem, das ich habe. Nun, ich denke, ich muss meine Stack-Architektur und den Lebenszyklus meiner Kontexte überdenken. –

Antwort

0

Angenommen, diese Objekte sind bereits gespeichert und nicht temporäre Objekte, die sich ein bisschen anders verhalten. Wenn Sie wissen, dass die Objekte bereits vorhanden sind, können Sie objectWithID anstelle von existingObjectWithID verwenden. Beachten Sie, dass Sie auf diese Weise immer ein Objekt zurückbekommen, aber es ist möglicherweise nicht gültig, also müssen Sie es überprüfen.

Obwohl die gesamte Dokumentation besagt, dass sich ein übergeordneter Kontext wie der permanente Sicherungsspeicher von untergeordneten Kontexten verhält, funktioniert es in der Praxis nicht so. Daher ist das direkte Abrufen der Objekte aus dem untergeordneten Kontext für Sie geeignet.

+0

Danke. Das eigentliche Problem liegt näher am obigen Kommentar von Khundragpan. Da das Speichern des Hauptkontexts asynchron erfolgt, kann ich nicht sicher sein, wann die Objekte gespeichert werden oder nicht. Ich werde meinen Stack und den Lebenszyklus von Kontexten neu überdenken. –

Verwandte Themen