In meinem AppDelegate
's applicationDidFinishLaunching
Ich muss ein Objekt mit Daten von der Festplatte lesen, und dann dieses Objekt an den ursprünglichen Ansicht Controller für die Anzeige übergeben. Was wäre der beste Weg, dies zu tun?Was ist die beste Methode, um ein Objekt beim Anwendungsstart an einen NSViewController zu übergeben?
Im Moment bin Laden ich das Drehbuch programmatisch wie so:
func applicationDidFinishLaunching(_ aNotification: Notification) {
importantThing = ImportantThing()
importantThing.load(url: URL(fileURLWithPath: "..."))
let storyboard = NSStoryboard(name: "Main", bundle: nil)
myWindowController = storyboard.instantiateController(withIdentifier: "MyWindowController") as! NSWindowController
(myWindowController.contentViewController as? MyViewController)?.importantThing = importantThing
myWindowController.showWindow(self)
}
Aber das fühlt sich klobig. Zum einen wird die Eigenschaft nach viewDidLoad
festgelegt, so dass jetzt Setup ist seltsam.
Es muss einen besseren Weg geben, dies zu tun. Wenn es möglich ist, möchte ich nicht auf ein Singleton zurückgreifen, da ich tatsächlich ein paar miteinander verbundene Objekte einrichten muss (zwei Objekte mit wichtigem Status, die Referenzen zueinander haben, aber es macht keinen Sinn, entweder die andere). Was wäre ein guter Weg, um das zu lösen?
"Die Eigenschaft wird nach' viewDidLoad' eingestellt "Ich bin kein Experte, aber bist du dir sicher? – matt
Ja, ich habe versucht, den Eigenschaftswert in 'viewDidLoad' zu protokollieren und es ist immer noch'nil' –
Noch einmal getestet, um sicher zu sein, und wenn ich" viewDidLoad "und" didSet "in ihren jeweiligen Funktionen drucke, erscheint" viewDidLoad "zuerst . –