5

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

它们被命名为“WYSunFlowerWindowController.h”和“WYSunFlowerWindowController.m”。

然后我附加如下初始化函数:

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

    return [super initWithWindowNibName:@"WYSunFlowerWindowController" owner:self];
}

我的 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];
}

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

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

更新:

这是我的项目来源。请看看并帮助我弄清楚我的错误是什么。</p>

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

4

1 回答 1

2

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

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

编辑

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

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

编辑2:

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

于 2012-09-19T07:41:16.580 回答