NSWindowController windowDidLoad未调用

Mik*_*ade 10 cocoa nswindowcontroller

我有一个使用NSWindowController子类的简单Cocoa应用程序.在笔尖我设置:

  • 文件所有者的类到我的NSWindowController子类
  • 文件所有者的"窗口"出口到笔尖中的主要NSWindow.

我的NSWindowController子类的init方法被调用(我称之为超级),但不管我做什么都不会调用windowDidLoad.

我必须遗漏一些明显的东西,但对于我的生活,我无法弄清楚它是什么.

Rob*_*ger 24

您正尝试NSWindowController通过在另一个nib中实例化它来创建实例.但是,当您在nib文件中实例化一个对象时,它会通过调用进行初始化-initWithCoder:.

-initWithCoder:不是指定的初始值设定项NSWindowController,因此您的实例NSWindowController永远不会实际加载其笔尖.

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

AppDelegate.h中:

@class YourWindowController;
@interface AppDelegate : NSObject
{
    YourWindowController* winController;
}
@end
Run Code Online (Sandbox Code Playgroud)

AppDelegate.m中:

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
    winController = [[YourWindowController alloc] init];
    [winController showWindow:self];
}
- (void)dealloc
{
    [winController release];
    [super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)

YourWindowController.m中:

@implementation YourWindowController
- (id)init
{
    self=[super initWithWindowNibName:@"YourWindowNibName"];
    if(self)
    {
        //perform any initializations
    }
    return self;
}
@end
Run Code Online (Sandbox Code Playgroud)


Dem*_*tri 14

通过笔尖实例化窗口控制器是完全可以的.而不是windowDidLoad用作你的钩子,在这种情况下你会想要使用awakeFromNib.