我使用Xcode模板创建了一个新的空白标准应用程序。删除了MainMenu.xib中的窗口,我用xib创建了一个新的自定义NSWindowController子类。
他们被命名为“WYSunFlowerWindowController.h”和“WYSunFlowerWindowController.m”。
然后我添加如下的init函数:
- (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和可可的新手。所以我想我可能犯了一个愚蠢的错误,我自己无法弄明白。
更新:
这是我的项目来源。请看看,帮我弄清楚我的错误。
答案 0 :(得分:2)
在你的init方法中,我认为你必须在返回self之前先将self设置为super init。
-(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。