模态表在applicationdidfinishlaunching中不起作用?

时间:2015-01-18 17:50:52

标签: xcode macos cocoa modal-dialog osx-yosemite

我试图在应用程序完成启动时让工作表以模态方式显示。如果我将代码放在一个通用操作中并在应用程序启动后的某个地方执行它,它会按照需要工作,并且工作表很好地下降。如果我使用相同的代码并将其放在applicationdidfinishlaunching中,则表单显示为单独的窗口(这不是我需要的)。

 [NSApp beginSheet:settingsWindow
   modalForWindow:[NSApp keyWindow]
    modalDelegate:nil
   didEndSelector:nil
      contextInfo:nil];
[NSApp runModalForWindow:settingsWindow];

[NSApp endSheet:settingsWindow];
[settingsWindow orderOut:self];

启用时可见选项已禁用。感谢任何建议。我也在awakefromnib中尝试了同样不正确的结果。

编辑:使用[self performSelector:@selector(someAction :) withObject:self afterDelay:0.5]; someAction的内容如上所示,产生正确的结果。这是为什么?

1 个答案:

答案 0 :(得分:1)

NSApp' beginSheet: modalForWindow: modalDelegate: didEndSelector: contextInfo:endSheet:deprecated in OS X 10.10。您应该使用beginSheet: completionHandler: on NSWindow实例以模态方式显示工作表窗口。

NSWindow *mainWindow = [NSApp windows][0]; 
[mainWindow beginSheet:settingsWindow completionHandler: nil];

顺便说一下,[NSApp keyWindow]是否会在didFinishLaunching中返回一个实例?