我有一个使用NSWindowController子类的简单Cocoa应用程序。在 Nib 中,我设置了:

我的NSWindowController子类的

  • 文件所有者的类
  • 文件所有者的'Window'导出到 Nib 的主NSWindow。

  • 我的NSWindowController子类的init方法被调用(我称为super),但无论如何我都不会调用windowDidLoad。

    我肯定想念一些明显的东西,但是对于我的一生,我无法弄清楚它是什么。

    最佳答案

    您正在尝试通过在另一个 Nib 中实例化NSWindowController的实例来创建它。但是,当您实例化nib文件中的对象时,可以通过调用-initWithCoder:对其进行初始化。
    -initWithCoder:不是NSWindowController的指定初始值设定项,因此,您的NSWindowController实例实际上不会加载其 Nib 。

    不用通过将其放在Interface Builder中的NSWindowController文件中来实例化MainMenu.xib实例的方法,而是通过编程方式创建它:

    AppDelegate.h 中:

    @class YourWindowController;
    @interface AppDelegate : NSObject
    {
        YourWindowController* winController;
    }
    @end
    

    AppDelegate.m 中:
    @implementation AppDelegate
    - (void)applicationDidFinishLaunching:(NSNotification*)notification
    {
        winController = [[YourWindowController alloc] init];
        [winController showWindow:self];
    }
    - (void)dealloc
    {
        [winController release];
        [super dealloc];
    }
    @end
    

    YourWindowController.m 中:
    @implementation YourWindowController
    - (id)init
    {
        self=[super initWithWindowNibName:@"YourWindowNibName"];
        if(self)
        {
            //perform any initializations
        }
        return self;
    }
    @end
    

    关于cocoa - NSWindowController windowDidLoad不被调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2695671/

    10-09 16:17