【问题标题】:What happens if I load a nib w/o passing the file owner in the xib as the owner in -loadNibNamed: owner:如果我加载一个笔尖而不将 xib 中的文件所有者作为 -loadNibNamed 中的所有者传递:所有者:
【发布时间】:2015-06-16 22:23:38
【问题描述】:

我最近才知道 xib 的文件所有者不必是 NSWindowControllerNSViewController(不知道我为什么这么认为)。

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

  1. 实例化了一个对象(使用 MVC,控制器)。出口 属性没有连接,并且指向nil

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

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

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

但现在对我来说没有意义的是,为什么我在 -loadNibNamed 调用中指定笔尖的所有者甚至很重要。

   BOOL effectsXibLoaded = [[NSBundle mainBundle] loadNibNamed:@"Effects"
                                                         owner:self.effectsController
                                               topLevelObjects:nil];

我这么说是因为我想是因为我们在nib 中指定了文件所有者是谁——因此当nib 被初始化时,它应该知道将它的出口连接到谁对吗?

或者在-loadNibNamed 中指定owner 只是将另一个对象添加到owners 列表的一种方式(如果这是一件事?)。我想只有一位所有者收到来自一位nib-awakeFromNib 电话,但我不确定。

也就是说,如果我指定owner,当nib唤醒时,它会通知说owner,以及xib中指定的owner

另外我对我对事情执行顺序的理解没有信心,所以如果我需要更正,请不要犹豫

【问题讨论】:

    标签: objective-c cocoa nib


    【解决方案1】:

    xib 中的所有者是一个类。

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

    NSApplicationMain 有一些神奇之处,它计算出应用程序委托类,创建一个实例,使其成为主 nib 的所有者,并将该实例设置为应用程序的委托......但这里没有任何内容表明如果您不先分配初始化一个,则将生成指定为文件所有者的类的实例...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多