Ich habe folgende Core Data Setup in meiner App:Core Data: Parent Kontext und Änderungspropagierung
Persistent Store Coordinator
^Background MOC (NSPrivateQueueConcurrencyType)
^Main Queue MOC (NSMainQueueConcurrencyType)
Hier ist der Code für die Initialisierung:
_backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_backgroundContext setPersistentStoreCoordinator:self.coordinator];
_mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_mainContext setParentContext:_backgroundContext];
ich den Hintergrund MOC verwenden für den Import von großen Datenmengen. Ich verwende es auch, um komplexe Abrufanforderungen im Hintergrund auszuführen und dann die Objekt-IDs an die Hauptwarteschlange zu übergeben, um die Objekte unter Verwendung dieser IDs abzurufen.
Das funktioniert ganz gut. Ich bin mir jedoch nicht sicher, wie ich die Hauptwarteschlange MOC über die Änderungen informieren soll, die im Hintergrund-MOC vorgenommen wurden. Ich weiß, dass, wenn ich eine Abrufanforderung in der Hauptwarteschlange MOC ausführe, die Änderungen erhalten wird, aber das ist nicht das, was ich möchte.
Ist es in Ordnung, die NSManagedObjectContextObjectsDidChangeNotification
Benachrichtigung zu verwenden, die durch den Hintergrund MOC bekannt gegeben wird, und mergeChangesFromContextDidSaveNotification:
auf der Hauptwarteschlange MOC zu benennen? Dies sollte dann dazu führen, dass die NSManagedObjectContextObjectsDidChangeNotification
Benachrichtigung der Hauptwarteschlange MOC ausgelöst wird. Ich höre auf diese Benachrichtigung in meiner Sicht Controller und untersuchen Sie die userInfo
für Änderungen und Anzeigen von Daten entsprechend. Ich denke, dass du es normalerweise so machst, wenn du einen beständigen Ladenkoordinator mit zwei verbundenen MOCs hast. Aber ich bin mir nicht sicher, ob es der richtige Weg ist, wenn Sie Kind/Eltern-Kontexte haben.
Ist es möglich, BGPrivateMOC als Kind von mainMOC zu erstellen und alle BG-Änderungen durch Speichern von BGPrivateMOC zu verbreiten? Ich habe es versucht, aber mein mainMOC hat keine Änderungen vom BGPrivateMOC erhalten. Entschied dich, deinen Stack auszuprobieren. Es wirkt wie ein Zauber. –
Oh, etwas ist schief gelaufen, es funktioniert nicht mehr. Die Zusammenführung aktualisiert den Hauptkontext nicht. –
Sie müssen mehr Details als das ... vielleicht geben Sie eine neue Frage mit Details über Ihr spezifisches Problem ... und vielleicht kommentieren Sie hier über diese Frage, wenn Sie wollen, dass ich es sehe ... –