我有一个使用NSWindowController子类的简单Cocoa应用程序。在我设定的笔尖上:
中的主NSWindow
我的NSWindowController子类的init方法被称为(我称为超级),但不管我做什么,windowDidLoad永远不会被调用。
我一定是错过了一些显而易见的东西,但对于我的生活,我不知道它是什么。
发布于 2010-04-23 03:54:16
您试图通过在另一个nib中实例化NSWindowController实例来创建它。但是,当您在nib文件中实例化一个对象时,它是通过调用-initWithCoder:初始化的。
-initWithCoder:不是NSWindowController的指定初始化程序,因此您的NSWindowController实例从未实际加载它的nib。
与其通过将NSWindowController实例放在Interface中的MainMenu.xib文件中实例化,不如以编程方式创建它:
在AppDelegate.h中
@class YourWindowController;
@interface AppDelegate : NSObject
{
YourWindowController* winController;
}
@end在AppDelegate.m中
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
winController = [[YourWindowController alloc] init];
[winController showWindow:self];
}
- (void)dealloc
{
[winController release];
[super dealloc];
}
@end在YourWindowController.m中
@implementation YourWindowController
- (id)init
{
self=[super initWithWindowNibName:@"YourWindowNibName"];
if(self)
{
//perform any initializations
}
return self;
}
@end发布于 2012-02-19 20:22:51
通过nib实例化窗口控制器是非常好的。与其使用windowDidLoad作为钩子,在这种情况下,您还需要使用awakeFromNib。
发布于 2010-04-23 01:58:58
该窗口可能会按需加载--尝试将window发送到自己的-init中。有关更多信息,请参见the discussion of -[NSWindowController loadWindow] in the documentation。
https://stackoverflow.com/questions/2695671
复制相似问题