Die iOS documentation besagt Folgendes mit "Durchführen von Blockoperationen":Swift verwenden, wenn Performing Blockoperationen
func performBlockAndWait (_ Block:() -> Void)
Diskussion Sie verwenden Diese Methode zum Senden von Nachrichten an verwaltete Objekte, wenn der Kontext mithilfe von NSPrivateQueueConcurrencyType oder NSMainQueueConcurrencyType initialisiert wurde.
Aber was verwirrt mich, Apples Dokumentation Beispiele mit Core Data nicht immer Verwendung „Durchführen von Blockoperationen“.
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
let moc = managedObjectContext
let employeesFetch = NSFetchRequest(entityName: "Employee")
do {
let fetchedEmployees = try moc.executeFetchRequest(employeesFetch)
as! [AAAEmployeeMO]
} catch {
fatalError("Failed to fetch employees: \(error)")
}
Was ich frage mich ist, wenn der Block-Operationen zu verwenden. Es empfiehlt sich, sie immer zu verwenden, wenn Sie mit einem verwalteten Objektkontext arbeiten. Und aus welchem Grund Apple sie nicht immer in ihrem Beispielcode verwendet. Hier verwenden sie es (core data api reference), und hier nicht (core data programming guide).
Sorry, das habe ich nicht vermisst. Könnte meine Frage deutlicher formuliert haben. "Diskussion Sie verwenden diese Methode, um Nachrichten an verwaltete Objekte zu senden, wenn der Kontext mit NSPrivateQueueConcurrencyType oder NSMainQueueConcurrencyType initialisiert wurde." Dies schlägt vor, diese immer zu verwenden, unabhängig von Ausnahmen. Ich frage mich, was die beste Praxis ist. Da stimmt die Apple-Dokumentation nicht überein. – BARJ
Ich verstehe deine Lektüre davon nicht. Die Ausnahme ist ziemlich explizit, während die Sprache der allgemeinen Regel neutral ist und keine starke Sprache hat. Das bedeutet, dass Sie im Allgemeinen (da Sie häufig Core Data-Operationen in einem Hintergrundthread durchführen) "performAndWait" verwenden müssen. Es ist auch klar aus dem Nachdenken über Threads. Was sie sagen wollen, ist, dass der MoC-Methodenaufruf * bereits * synchron ist, wenn er von demselben Thread aufgerufen wird, auf dem er konfiguriert ist. 'performAndWait' ist daher redundant. – BaseZen