Cocoa:在控制器中的windowDidLoad中获取窗口

时间:2011-08-31 22:06:50

标签: objective-c cocoa nswindow nswindowcontroller

我的NSWindowController有以下代码:

- (id)init {
    [self initWithWindowNibName:@"MyWindow"];       
    [self loadWindow];
    return self;
}

- (void)windowDidLoad
{
    [super windowDidLoad];

    NSWindow *window = [self window];
    NSAssert(window != nil, @"Can’t get window!");

    // do some stuff    
}

NSAssert失败。

为什么?

我怎样才能看到窗口?

2 个答案:

答案 0 :(得分:3)

这里有两个问题。首先,您的初始化程序错过了self的作业:

- (id)init 
{
    self = [super initWithWindowNibName:@"MyWindow"];
    if(self)
    {
        [self loadWindow];
    }
    return self;
}

其次,您断言失败的可能原因是您没有将nib文件中文件所有者window出口连接到窗口对象。这意味着您的窗口控制器不知道窗口属性指向的对象。

如果您不了解如何在Interface Builder中设置插座,那么您有很多学习要做的事情,在进行任何其他操作之前应该先进行simple tutorial,因为了解插座和操作的工作方式是基本的能够用Cocoa编程。

答案 1 :(得分:-2)

不应该有

self = [super init];

中的

- (id)init {
[self initWithWindowNibName:@"MyWindow"];       
[self loadWindow];
return self;

}