【问题标题】:App stuck on runModalForWindow应用程序卡在 runModalForWindow
【发布时间】:2011-11-02 21:43:02
【问题描述】:

我试图在我的应用程序顶部显示一个模式对话框,但它在关闭时阻止了我的主应用程序窗口。这是我的代码:

TutorialWindowController* pTutorialController = [[TutorialWindowController alloc] initWithWindowNibName:@"TutorialWindow"];
NSWindow* pTutorialWindow = [pTutorialController window];
DDLogInfo(@"Tutorial window opening...");
[NSApp runModalForWindow: pTutorialWindow];
DDLogInfo(@"Tutorial window closed!"); // CODE NEVER GETS HERE
[NSApp endSheet: pTutorialWindow];
[pTutorialWindow orderOut: self];

在模态对话框中,我的关闭按钮运行:

- (IBAction)closeButtonPressed:(id)sender {
    [NSApp stopModal];
}

模态对话框显示正常。但是,当我单击关闭按钮时,对话框消失并且我的应用程序的主窗口没有响应。每次我尝试点击时,我都会听到声音。我很确定这是因为代码在 runModalForWindow 之后永远不会继续。如果我使用红色 X 关闭模态对话框,也会发生同样的情况。

我做错了什么?

【问题讨论】:

    标签: objective-c xcode macos


    【解决方案1】:

    在订购教程窗口后,尝试做一个

      [window makeKeyAndOrderFront:self];
    

    在您的主窗口上。

    【讨论】:

      【解决方案2】:

      您应该先致电[pTutorialWindow orderOut:nil]

      【讨论】:

      • 先打电话?在哪里。请添加更多详细信息
      • 就在[NSApp endSheet:pTutorialWindow];之前
      【解决方案3】:

      不确定 closeButtonPressed 处理程序。但尝试添加到委托:

      - (void) windowWillClose:(NSNotification *)notification
      {
          // ...
          // In there, you should verify that you are calling:
          [NSApp stopModal]
      }
      

      添加 stopModal 调用为我解决了这个问题。

      【讨论】:

        【解决方案4】:

        验证界面编辑器的连接检查器中的窗口委托已连接到文件的所有者。

        我有几个模态对话正常工作,除了一个,唯一的区别是缺少连接。建立连接解决了问题。

        【讨论】:

        • 对我不起作用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多