哪些问题可能导致将 nib 文件的所有者设置为 nil?



如果我可以在不使用文件所有者的情况下从 nib 文件加载对象,那么文件所有者存在的原因是什么?此外,可以在不使用文件所有者的情况下创建出口动作连接。例如,我可以直接从物体连接到笔尖。所以我真的无法理解对文件所有者的需求。它与 MVC 模式有什么关系吗?文件的所有者必须是UIView控制器类型吗?

在加载 nib 文件期间,Cocoa 会生成在 nib 文件中序列化的每个对象。然后,对于 nib 文件中的每个连接,它会在目标对象上调用 setValue:forKey: 来创建连接。某些连接是到对象nil 。这些setValue:forKey:消息将发送到作为文件所有者传递的任何对象。

如果您没有文件所有者,则将忽略nil连接。如果您没有nil连接,那么这与没有文件所有者没有什么不同。这种情况并不特别常见。

所有这些都允许您通过将不同的文件所有者传递给加载过程来实例化同一 nib 文件对象的多个实例。


编辑:

请记住,nib 文件只是一堆序列化的对象。当您以编程方式创建具有 initWithNibName:bundle: 的视图控制器时,在加载 nib 文件之前,视图控制器已存在。nib 文件中的对象几乎总是希望能够引用该视图控制器。因此,我们将视图控制器传递给作为文件所有者的UINib。只要 nib 文件显示 nilUINib用文件所有者(通常是视图控制器)替换它。

这是非常灵活的,但灵活性不是重点。如果在 nib 实例化期间没有传入 nib 文件,则无法引用 nib 文件中的视图控制器。

最新更新