如果我加载一个nib没有在xib中作为所有者在-loadNibNamed中传递文件所有者:所有者:

时间:2015-06-16 22:23:39

标签: objective-c cocoa nib

我刚刚才知道xib的文件所有者不一定是NSWindowControllerNSViewController(不知道我为什么这么认为)。

所以我明白这就是事情发生的顺序:

  1. 实例化对象(w / MVC,控制器)。出口 属性未连接,并指向nil

  2. 必须使用-initWithNibNamed初始化笔尖(并且会 在访问viewwindow时加载或w / -loadNibNamed(将初始化,然后将笔尖加载到一起)

  3. 初始化笔尖后,所有插座都已连接

  4. 在控制器上调用
  5. -awakeFromNib

  6. 但是现在对我来说没有意义的是,为什么我在-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}}?

    此外,我对自己对事情执行顺序的理解并不自信,所以如果我需要更正,请不要犹豫

1 个答案:

答案 0 :(得分:0)

xib中的所有者是一个类。

loadNibNamed中的所有者是一个实例。

NSApplicationMain中有一些神奇的地方,它可以找出app委托类,创建一个实例,使其成为主nib的所有者,并将该实例设置为应用程序的委托...但是这里没有任何内容表明如果你不首先分配init,那么将生成指定为File的所有者的实例...