Ich habe eine Datei globals.swiftGlobale Variablen für Core Data Classes (Bad ?, gut?)
Der Code ist sehr einfach und sieht wie folgt genannt.
import Foundation
import CoreData
import UIKit
var g_workOrders = [Workorders]()
var g_services = [Service]()
//Shortcut method to get the viewcontext easily from anywhere.
func gm_getContext() -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
//For unique constraints it will overwrite the data.
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
return context
}
Mein Datenmodell ist sehr einfach, es ist ein Arbeitsauftrag, die zu einem ‚Dienst‘ bezeichnet, die in meinem Kontext als Beschreibung gedacht für den Arbeitsauftrag werden können. Arbeitsaufträge können nur einen "Service" haben. Ein "Service" kann zu vielen Arbeitsaufträgen gehören, hat jedoch keine Beziehung zu vielen von ihnen. Es ist also eins zu eins, glaube ich noch.
g_workOrders [] und g_services [] sind NSManagedSubclasses, die ich aus dem Editor-Menü erstellt habe -> createNSManagedSubClasses.
Ich plane, diese Arrays im gesamten Programm zu verwenden, um den aktuellen Status der Arbeitsaufträge zu verfolgen und jederzeit Informationen über einen Dienst zu erhalten. Wenn ich außerdem die globalen Variablen aktualisiere und den Speicher für den Kontext aufruft, sollte die Datenbank gespeichert werden. Das funktioniert derzeit, aber meine Frage ist ... ist das eine gute Praxis?Kann ein unerwartetes Verhalten dadurch entstehen?
Danke für Ihre Antwort, ich hatte dieses Gefühl, ich könnte darüber falsch gehen, aber war mir nicht sicher, warum ... Es würde erscheinen, was Sie bekommen ist Zugriff auf die Daten, so wie ich sie benötige, über coreData-Befehle und Fetch, anstatt zu versuchen, eine globale Variable dafür zu verwenden. Ich denke, ich werde diesen Ansatz versuchen, aber das wirft eine interessante Frage auf. Für jede Tabelle wollte ich einen Verweis auf das 'Objekt' erstellen, das bestimmte Zustände wie 'ein' oder 'aus' enthält. Ich habe darüber nachgedacht, das als Klassenvariable in den Tablecontroller zu setzen, ich frage mich, ob das die gleichen Probleme verursachen würde. –
Der Grund, warum ich sagte, dass der Service zu vielen Arbeitsaufträgen gehören kann, war, weil technisch viele Arbeitsaufträge auf eine Servicevorlage verweisen, aber die Servicevorlage immer nur auf einen Arbeitsauftrag zu einem Zeitpunkt verweist. Dieses Zeug war für mich immer der richtige Weg, es zu tun: P. In meinem Kopf dachte ich, die NSManagedSubclass würde diese Array-Variable auf dem Dienst haben, die keinen Sinn machen würde, dass sie nur eine Variable zu einem Arbeitsauftrag haben sollte. Ist das sinnvoll? –
Klingt wie ein Klassiker zu vielen, wobei ein Dienst mit mehreren Arbeitsaufträgen verbunden ist. Sie sollten eine Servicevariable in Arbeitsreihenfolge und ein Array von workOrders im Service mit einer Verbindung zwischen diesen Attributen haben. – PeejWeej