I am new to Cocoa and I don't understand the concept of File's Owner
of a .nib file.
Here is the way I would see things :
Consider a file myNibFile.nib
file that describes how a window looks.
Now, I want to connect an actual window to this .nib file. So, I create a class myWindow
, which is a subclass of NSWindowController
. And, to do this connection, I change the init
method like this:
-(id)init
{
[super initWithWindowNibName:@"myNibFile"];
return self;
}
So, I understand that when I create an instance of myWindow
, the "system" will go and look at the .nib file and create the adequate object.
So, my question are :
why do I have to specify that the File's Owner
of my .nib file is myWindow
? Isn't it redundant ?
I guess it means I didn't really understood what the File's Owner
. What is it ? Why does the .nib file have to belong to something ? Can't it be "somewhere" in my "application" and when it is needed, the "system" goes there and use it ?
Thanks for helping me to see more clearly in these new concepts !
Two points to be remembered:
loadNibNamed:
or initWithNibName:
.So you created a fancy view with lots of buttons, subviews etc . If you want to modify any of these views / objects any time after loading the nib FROM the loading object (usually a view or window controller) you set outlets for these objects to the file owner. It's that simple.
This is the reason why by default all View Controllers or Window Controllers act as file owners, and also have an outlet to the main window or view object in the nib file: because duh, if you're controlling something you'll definitely need to have an outlet to it so that you can send messages to it.
The reason it's called file owner and given a special place, is because unlike the other objects in the nib, the file owner is external to the nib and is not part of it. In fact, it only becomes available when the nib is loaded. So the file owner is a stand-in or proxy for the actual object which will later load the nib.
Hope you've understood. I'll clarify any of the points if you ask.