I have a simple Cocoa app using a NSWindowController subclass. In the nib I have set:
The init method of my NSWindowController subclass is called (I call super), but not matter what I do windowDidLoad is never called.
I must be missing something obvious, but for the life of me I can't figure out what it is.
You're trying to create the instance of NSWindowController
by instantiating it in another nib. However, when you instantiate an object in a nib file, it is initialized by calling -initWithCoder:
.
-initWithCoder:
is not a designated initializer of NSWindowController
, so your instance of NSWindowController
never actually loads its nib.
Instead of instantiating your NSWindowController
instance by placing it in the MainMenu.xib
file in Interface Builder, create it programmatically:
In AppDelegate.h:
@class YourWindowController;
@interface AppDelegate : NSObject
{
YourWindowController* winController;
}
@end
In AppDelegate.m:
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
winController = [[YourWindowController alloc] init];
[winController showWindow:self];
}
- (void)dealloc
{
[winController release];
[super dealloc];
}
@end
In YourWindowController.m:
@implementation YourWindowController
- (id)init
{
self=[super initWithWindowNibName:@"YourWindowNibName"];
if(self)
{
//perform any initializations
}
return self;
}
@end