我写了一个OSX故事板应用程序,它有一个闪屏。它是NSWindow,带有NSWindowController,没有子类,有一个SplashViewController,它是NSViewController的子类。
以下是SplashViewController的代码:
NSArray *a = [[NSApplication sharedApplication] windows];
NSLog(@"%ld", a.count);
NSSavePanel *savePanel = [NSSavePanel savePanel];
[savePanel setAllowedFileTypes:@[@"pdf"]];
[savePanel setDirectoryURL:[NSURL URLWithString:NSHomeDirectory()]];
[savePanel beginSheetModalForWindow:self.view.window completionHandler:nil];
这会按预期关闭窗口/窗口控制器。
segue有 show 类型,并呈现另一个NSWindowController,它有MainViewController,NSViewController的子类。当MainViewController打开保存对话框时:
$locale
出现旧的启动窗口(打印“1”)。什么?我的意思是它出现的原因? NSSavePanel与它有什么关系?
答案 0 :(得分:0)
感谢this answer(尽管部分无关),我设法让它发挥作用。
使用storyboard时看起来有几个错误(我正在使用XCode 6.3.1)。为了解决这个问题,你需要:
选择您的初始窗口控制器并取消选中"是初始控制器" (即没有为故事板设置初始控制器)。
您的主窗口控制器应进行子类化,即使子类为空。
将主窗口控制器的故事板ID设置为 Main (如果省略上一步,故事板ID 已删除,一旦离开故事板,第一个bug )。
在AppDelegate.m中添加以下代码:
@property (strong, nonatomic) NSWindowController *mainWindowController;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSApp activateIgnoringOtherApps:YES];
NSStoryboard *storyboard = [NSStoryboard storyboardWithName:@"Main" bundle:nil];
NSWindowController *main = [storyboard instantiateControllerWithIdentifier:@"Main"];
[main showWindow:self];
[main.window makeKeyAndOrderFront:self];
// Important! Should be strong to retain instance. Second bug.
// If you don't do that, your window will open and close right away.
_mainWindowController = main;
}