首页 > 解决方案 > 显示工作表时,NSheet 控制器不会运行。

问题描述

在 Objective-C 环境中,我有一个自定义控制器“MyWindowController”作为相关 XIB 的文件所有者,用作我的主窗口上的模式表。

根据 Apple 文档按如下方式调用(减去弃用):

//in the main's awakeFromNib
MyWindowController = [[NSWindowController alloc]
                    initWithWindowNibName:@"MyWindowController"];

//in the main place where needed
[NSApp beginSheet: MyWindowController.window
        modalForWindow: _window
        modalDelegate: nil
        didEndSelector: nil
        contextInfo: nil ];
[NSApp runModalForWindow: MyWindowController];
// Dialog is up here.
[NSApp endSheet: MyWindowController.window];
[MyWindowController.window orderOut:self];

目前,MyWindowController 是 NSWindowController 的最小子类,包括以下按钮:

- (IBAction)doCancel:(id)sender
{
//...set return value
    [NSApp stopModal];
}

当正在运行的主代码调用时,工作表会正确显示,但控制器中的代码永远不会运行。在 MyWindowController 中设置的断点,包括在其 awakeFromNib 处的断点永远不会到达。

我在工作表主题上尝试了这么多变体,效果都一样,我很难过。

标签: dialogmodal-dialognswindow

解决方案


[[NSWindowController alloc] initWithWindowNibName:@"MyWindowController"]

创建一个NSWindowController. 如果您想要 的实例MyWindowController,请使用

[[MyWindowController alloc] initWithWindowNibName:@"MyWindowController"]

推荐阅读