如何使用NSWindowController在标准应用程序中显示一个窗口?

mor*_*wan 5 xcode cocoa objective-c nib nswindowcontroller

我使用Xcode模板创建了一个新的空白标准应用程序.删除了MainMenu.xib中的窗口,我用xib创建了一个新的自定义NSWindowController子类.

它们被命名为"WYSunFlowerWindowController.h"和"WYSunFlowerWindowController.m".

然后我添加init函数,如下所示:

- (id)init
{
    NSLog(@"init()");

    return [super initWithWindowNibName:@"WYSunFlowerWindowController" owner:self];
}
Run Code Online (Sandbox Code Playgroud)

我的WYAppDelegate.m文件如下所示:

static WYSunFlowerMainWindowController* windowController = nil;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    if (windowController == nil) {
        windowController = [[WYSunFlowerMainWindowController alloc] init];
    }
    [[windowController window] makeKeyAndOrderFront:windowController];
}
Run Code Online (Sandbox Code Playgroud)

我有问题,在我启动应用程序后,窗口无法自我显示.谁能告诉我为什么?我的代码有什么问题吗?

我是Objective-C和可可的新手.所以我想我可能犯了一个愚蠢的错误,我自己无法弄明白.

更新:

这是我的项目来源.请看看,帮我弄清楚我的错误是什么.

https://dl.dropbox.com/u/3193707/SunFlower.zip

The*_*mer 2

在你的 init 方法中,我认为你必须先将 self 设置为 super init,然后再返回 self。

-(id)init
{
    NSLog (@"init()");
    self = [super initWithWindowNibName:@"WYSunFlowerWindowController" owners:self];
    return self;
}
Run Code Online (Sandbox Code Playgroud)

编辑

尝试替换makeKeyAndOrderFront:[windowController showWindow:self]

然后,如果仍然不起作用,请检查您的窗口控制器 xib,确保文件所有者设置为 WYSunFlowerWindowController 并且 IBOutlet 窗口(在 NSWindowController 中声明)已连接到该窗口。

编辑2:

在控制器中注释掉 @property 和 @synthesize 窗口就是诀窍。不要重新声明超类中已预定义的 get 和 setter。