我使用情节提要在 Xcode 中创建了一个 Mac OS X 应用程序。由于某种原因,在 NSViewControllersapplicationDidFinishLaunching
中调用了 AppDelegateviewDidLoad
中的方法。与 iOS 应用程序一样,我认为viewDidLoad
应该在之前调用applicationDidFinishLaunching
?OS X 应用程序中的故事板是否会在应用程序完成启动之前初始化视图控制器?
我正在使用该applicationDidFinishLaunching
方法将默认设置注册到 NSUserDefaults。不幸的是,在故事板中的视图加载后注册默认值。因此,当我在每个视图控制器中使用 设置视图时viewDidLoad
,尚未设置 NSUserDefaults 中的默认数据。如果我不能applicationDidFinishLaunching
用来在 OS X 故事板应用程序中注册 NSUserDefaults,那么我之前如何设置默认值viewDidLoad
?
为了解决这个问题,Main.storyboard
在 Xcode 中,我关闭了主窗口的“Is Initial Controller”。我将情节提要 ID 分配给主窗口作为“MainWindow”。然后在 AppDelegate 中输入以下代码:
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)
}
}
该应用程序不会崩溃,但现在该窗口永远不会出现。下图显示了我正在使用的情节提要: