Ich habe oft Schnipsel wie der folgende Code gefunden, in dem eine NSPersistentContainer
in einem Abschluss initialisiert und einer Variablen zugewiesen wird.Problem mit einem Abschluss-Handler innerhalb einer Schließung aufgerufen
Allerdings denke ich nicht, dass dieser Code optimal ist, da der Completion-Handler der Funktion loadPersistentStores
nicht synchron mit dem Rest des Codes ausgeführt wird.
Das bedeutet, dass die storeDescription
nicht direkt nach dem Erstellen des Containers in der nächsten Codezeile verfügbar sein konnte. Richtig? Wenn ja, was könnte eine elegante Lösung sein?
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Test")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
Ich sehe. Ich habe eine Frage zu Punkt 3: Wenn Sie diese Lösung nicht persönlich mögen, warum schlagen Sie sie vor? :) Gibt es etwas besseres? (Ich mag es auch nicht) – aneuryzm
Es ist eine sehr einfache Lösung und es ist unfair, es nicht zu empfehlen, weil eine "elegante Lösung" nur Vorliebe ist. Ich habe die CoreData-Vorlage ein paar Mal benutzt und bin nie auf ein Problem mit dem langsam instanziierten persistantContainer gestoßen, ich würde vorschlagen, es einfach so zu belassen, wenn es kein Problem ist. – Simon