我刚刚才知道xib的文件所有者不一定是NSWindowController
或NSViewController
(不知道我为什么这么认为)。
所以我明白这就是事情发生的顺序:
实例化对象(w / MVC,控制器)。出口 属性未连接,并指向nil
必须使用-initWithNibNamed
初始化笔尖(并且会
在访问view
或window
时加载或w /
-loadNibNamed
(将初始化,然后将笔尖加载到一起)
初始化笔尖后,所有插座都已连接
-awakeFromNib
但是现在对我来说没有意义的是,为什么我在-loadNibNamed
电话中指定笔尖的所有者甚至更重要。
BOOL effectsXibLoaded = [[NSBundle mainBundle] loadNibNamed:@"Effects"
owner:self.effectsController
topLevelObjects:nil];
我说这是因为我想是因为我们在nib
中指定了文件所有者是谁 - 因此当nib
初始化时,它应该知道连接它的人是谁出口到右边?
或者在owner
中指定-loadNibNamed
只是一种将另一个对象添加到owners
列表的方法(如果这是一件事?)。我想只有一位所有者从-awakeFromNib
收到nib
来电,但我不确定。
换句话说,如果我指定owner
,当nib
醒来时,它会通知所述owner
以及owner
中指定的xib
{1}}?
此外,我对自己对事情执行顺序的理解并不自信,所以如果我需要更正,请不要犹豫
答案 0 :(得分:0)
xib中的所有者是一个类。
loadNibNamed
中的所有者是一个实例。
在NSApplicationMain
中有一些神奇的地方,它可以找出app委托类,创建一个实例,使其成为主nib的所有者,并将该实例设置为应用程序的委托...但是这里没有任何内容表明如果你不首先分配init,那么将生成指定为File的所有者的实例...