initWithWindow:在窗口控制器中没有被调用

时间:2015-01-14 10:50:47

标签: objective-c macos cocoa

我是Cocoa编程的新手。

在Xcode 6.1中,我使用storyboard创建了一个OS X应用程序。开箱即用的大纲中有一个窗口控制器。我将“Identity Inspector”中的类更改为NSWindowController的自定义子类,其名为WindowController

我在@implementation的{​​{1}}中写了以下代码:

WindowController

但是“输出”面板没有显示任何内容。

如果我覆盖了类中的- (instancetype)initWithWindow:(NSWindow *) window { NSLog(@"window"); window.titleVisibility = NSWindowTitleHidden; return [super initWithWindow:window]; } 方法,

windowDidLoad

消息显示。

doc of NSWindowController表示- (void)windowDidLoad { [super windowDidLoad]; self.window.titleVisibility = NSWindowTitleHidden; NSLog("@Cool..."); } 是该类的指定初始化程序。怎么可以跳过?

How Window Controllers Work section of Window Programming Guide中,它说:

  

对于简单文档 - 即只包含一个包含窗口的nib文件的文档 - 您需要直接使用-initWithWindow:个对象。 AppKit为您创建一个。但是,如果默认窗口控制器不足,则可以创建NSWindowController的自定义子类。

这正是我在做的事情。但我不知道我在这里缺少什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

据我所知,你应首先使用initWithWindow调用super,然后设置标题。否则,调用super会在没有先前设置的情况下初始化窗口。 当您覆盖windowDidLoad方法时,您可以在初始化后设置标题可见性,一切正常。