【发布时间】:2016-04-17 20:04:48
【问题描述】:
我使用故事板在 Xcode 中创建了一个 Mac OS X 应用程序。出于某种原因,AppDelegate 中的 applicationDidFinishLaunching 方法在 NSViewControllers 中的 viewDidLoad 之后被调用。与 iOS 应用程序一样,我认为 viewDidLoad 应该在 applicationDidFinishLaunching 之前调用? OS X 应用程序中的情节提要是否会在应用程序完成启动之前初始化视图控制器?
我正在使用applicationDidFinishLaunching 方法将默认设置注册到NSUserDefaults。不幸的是,在故事板中的视图加载后注册默认值。因此,当我在每个视图控制器中使用viewDidLoad 设置视图时,NSUserDefaults 中的默认数据尚未设置。如果我不能使用applicationDidFinishLaunching 在 OS X 故事板应用程序中注册 NSUserDefaults,那么在调用 viewDidLoad 之前如何设置默认值?
为了解决这个问题,在 Xcode 的 Main.storyboard 中,我关闭了主窗口的“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)
}
}
应用程序没有崩溃,但现在该窗口永远不会出现。下图显示了我正在使用的情节提要:
【问题讨论】:
-
谢谢你,你是救命恩人!!!
标签: xcode macos cocoa nsstoryboard