我使用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) } }
该应用程序不会崩溃,但现在窗口永远不会出现.下图显示了我正在使用的故事板:
解决方法
您可以改为设置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之类的内容.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。