I have an MainMenu.xib, and AppController is its file owner. I added -(void)awakeFromNib method which worked fine. Now, rounds of fixings down the road awakeFromNib stopped being called, and I can’t figure out why. It owns the xib, so it should be called when it is unarchived. What’s going on?
EDITED:
Well, I renamed awakeFromNib to something, and called that from init… that worked. Still confused as to why awakeFromNib is not. I also have a +(void) initialize method in there, could that be messing something up?
- (id)init {
self = [super init];
if (self) {
[self something];
}
return self;
}
-(void)something {
NSLog(@"yup");
}
Setting the class name of the File’s Owner in the nib is only so you can tell Xcode what object’s outlets and actions to show you so you can hook things up. It doesn’t affect what object is actually the File’s Owner when the app runs and the nib gets loaded.
The MainMenu nib’s File’s Owner is always the application object, no matter what class name you set for the FO in Xcode’s inspector. Setting it to any class name but NSApplication[1] is wrong.
When you run your app, you should find error messages in the Console about any outlets or actions of the AppController that you tried to connect. They couldn’t be connected because the application object doesn’t have them.
Change the class name back in the nib editor, and create your AppController as a custom object in the MainMenu nib.
That means that
initis getting called, which means you’re calling it. That’s a valid alternative to creating it in a nib, though you shouldn’t overrideawakeFromNibif it’s not in a nib or owning one.Your choice: Continue creating the AppController using
allocandinit, or remove that code and create it in the MainMenu nib instead.[1]: Or, if you’ve subclassed NSApplication and changed the principal class of your app bundle to be that subclass, the name of that subclass.