Kontext Setup: Child (private Warteschlange) -> Parent (Hauptwarteschlange) -> persistente Speicherung CoordinatorCore Data Eltern Kind Kontext Race-Bedingung
Etwa 50% der Zeit, wenn mein Kind Kontext speichern, meine Eltern/main Kontext erkennt die Änderungen nicht und speichert daher nie in dem persistenten Speicher.
func saveContext(context: NSManagedObjectContext, childThread: Bool) {
if context.hasChanges {
do {
try context.save()
print("saved on mainThread: \(!childThread)!")
} catch {
//...
}
if context.parentContext != nil { // private context
dispatch_async(dispatch_get_main_queue(), {
print("preparing to save main context")
self.saveContext(context.parentContext!, childThread: false)
})
}
} else {
print("no changes seen")
}
}
Mit anderen Worten, nachdem ich erfolgreich auf dem Kind Kontext speichern, meine saveContext Methode bereitet den Kontext auf dem Hauptthread zu sparen, nur etwa 50% der Zeit, scheitern und „keine Änderungen auszudrucken gesehen."
Wird context.save() asynchron ausgeführt? Muss ich etwas wie eine kontextgespeicherte Benachrichtigung verwenden? (Ich dachte, das wäre für die Eltern-Kind-Einrichtung nicht notwendig.)
Dies geschieht vor dem Aufruf von saveContext. – anders32