如果我加载一个笔尖而不将 xib 中的文件所有者作为 -loadNibNamed 中的所有者传递:所有者:

Posted

技术标签:

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

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

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

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

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

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

    -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

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

【问题讨论】:

【参考方案1】:

xib 中的所有者是一个类。

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

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

【讨论】:

以上是关于如果我加载一个笔尖而不将 xib 中的文件所有者作为 -loadNibNamed 中的所有者传递:所有者:的主要内容,如果未能解决你的问题,请参考以下文章

笔尖已装好,插座不见了

iOS6 xib 错误“加载了“ViewController”笔尖,但未设置视图出口。'”

自定义 XIB 的“文件所有者”

加载笔尖但未设置视图出口,找不到视图出口。

ViewController 正在加载一个不存在的笔尖

合并大文件而不将整个文件加载到内存中?