xcode – OS X故事板在applicationDidFinishLaunching之前调用viewDidLoad

我使用故事板在Xcode中创建了一个Mac OS X应用程序.出于某种原因,AppDelegate中的applicationDidFinishLaunching方法是在NSViewControllers中的viewDidLoad之后调用的.与iOS应用程序一样,我认为应该在applicationDidFinishLaunching之前调用viewDidLoad? 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)

    }
}

该应用程序不会崩溃,但现在窗口永远不会出现.下图显示了我正在使用的故事板:

enter image description here

解决方法

正确的是,OS X中的生命周期有点不同.

您可以改为设置MainMenu xib文件并将其指定为主界面,然后在AppDelegate中的applicationDidFinishLaunching方法中以编程方式设置故事板,而不是让故事板成为您的初始界面(这在项目的常规设置中定义).完成其他初始化代码后,实例化您的故事板.

我建议你查看OS X的Cocoa Programming:Big Nerd Ranch Guide如果你还没有;他们在他们的书中做的一件好事实际上是你摆脱了一些认的Xcode模板的东西,而是他们让你通过明确地做“正确”的方式设置你的初始视图控制器.

你可以在你的applicationDidFinishLaunching中输入这样的东西:

nsstoryboard *mainStoryboard = [nsstoryboard storyboardWithName:@"Main" bundle:nil];
    MyWindowController *initialController = (MyWindowController *)[mainStoryboard instantiateControllerWithIdentifier:@"myWindowController"];
    [initialController showWindow:self];
    [initialController.window makeKeyAndOrderFront:self];

这假设您已经将“Main Interface”更改为MainMenu.xib之类的内容.

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...