Parent_ContextCoredata - Multithreading bester Weg
Child_context (Set Parent_Context als Elternteil)
Child_context im Hintergrund zu verwenden, um neue Daten hinzuzufügen oder bestehende zu aktualisieren. Parent_Context zur Anzeige auf der Benutzeroberfläche und zum Speichern des persistenten Datenspeichers.
Child_context speichern sollte nicht dauern, da Änderungen nur im Speicher aktualisiert werden. Das wird auf Parent_Context aktualisiert.
Das Speichern von Parent_Context kann beim Schreiben in den Speicher etwas dauern. So können wir wählen, wann Parent_Context basierend auf der Notwendigkeit der Anwendung gespeichert wird.
So verwende ich normalerweise Kontext, wenn in Multithread-Umgebung benötigt oder um UI zu aktualisieren, während weiterhin auf Daten im Hintergrund zugegriffen wird.
// Parent or main
_mainQueueContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
_mainQueueContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
// Child or background context
_privateQueueContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_privateQueueContext setParentContext:self.mainQueueContext]; // Set main threads MOC as parent.
//To Save
if ([self privateQueueContext].hasChanges) {
[[self privateQueueContext] performBlockAndWait:^{
NSError *childError = nil;
if ([[self privateQueueContext] save:&childError]) {
[[self mainQueueContext] performBlock:^{
NSError *parentError = nil;
if (![[self mainQueueContext] save:&parentError]) {
DLog(@"Error saving parent, error: %@", [parentError localizedDescription]);
}
}];
} else {
DLog(@"Error saving child, error: %@", [childError localizedDescription]);
}
}];
}
Wenn es eine bessere Art und Weise ist eine solche Situation zu handhaben, bitte teilen. Vielen Dank.
Durch Speichern des Kontexts im Hintergrund Thread sehe ich nicht UI einfrieren. Stellen Sie Fragen, um andere bessere Wege zu kennen und mehr über Kerndaten zu erfahren.
Danke für den Austausch von Details. Ich mag die Art, wie Sie es tun, wenn ich neue Daten während der Anzeige abrufen muss. In meinem Fall habe ich privaten und Hauptkontext, um im Hintergrund abzurufen und UI beziehungsweise zu aktualisieren. Nochmals vielen Dank für Ihre Antwort. (Aber um die Rechte zu bekommen, um zu wählen :)) – Sharan
Sie können immer die Antwort akzeptieren, wenn Sie damit zufrieden sind. – oyalhi
** Sicher! ** @oyalhi – Sharan