as @OS X-Storyboard ruft viewDidLoad auf, bevor applicationDidFinishLaunching @ ausgeführt wir
Ich habe eine Mac OS X-Anwendung in Xcode mithilfe von Storyboards erstellt. Aus irgendeinem Grund ist dasapplicationDidFinishLaunching
-Methode im AppDelegate wird aufgerufen nachviewDidLoad
in den NSViewControllern. Wie bei iOS-Apps dachte ichviewDidLoad
soll vor @ aufgerufen werdapplicationDidFinishLaunching
? Initialisieren Storyboards in OS X-Apps die View-Controller, bevor die App gestartet wurde?
Ich benutze dasapplicationDidFinishLaunching
-Methode zum Registrieren von Standardeinstellungen in NSUserDefaults. Die Registrierung der Standardwerte findet leider statt, nachdem die Ansichten im Storyboard geladen wurden. Daher, wenn ich die Ansicht in jedem Ansichtscontroller mit @ einrichtviewDidLoad
, die Standarddaten in NSUserDefaults wurden nicht festgelegt. Wenn ich @ nicht benutzen kaapplicationDidFinishLaunching
, um NSUserDefaults in OS X-Storyboard-Apps zu registrieren, dann wie ich die Standardeinstellungen vor @ festgelegt haviewDidLoad
wird genannt
Um dieses Problem zu beheben, klicken Sie imMain.storyboard
In Xcode habe ich "Is Initial Controller" für das Hauptfenster deaktiviert. Ich habe dem Hauptfenster eine Storyboard-ID als "MainWindow" zugewiesen. Dann habe ich im AppDelegate folgenden Code eingegeben:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification) {
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let mainWindow = storyboard.instantiateControllerWithIdentifier("MainWindow") as! NSWindowController
mainWindow.showWindow(nil)
mainWindow.window?.makeKeyAndOrderFront(nil)
}
}
Die App stürzt nicht ab, aber jetzt wird das Fenster nie angezeigt. Das folgende Bild zeigt das Storyboard, mit dem ich arbeite: