objective-c - xcode xib 文件中文件所有者的需求是什么?我可以在没有文件所有者的情况下做同样的事情吗?

标签 objective-c xcode xib nib

为什么我应该设置文件所有者的类标识而不是 nib 中显示的自定义对象的类标识并从中建立连接?如果我将文件的所有者设置为 nil 会发生什么? 对我来说,一切都与 nil 文件的所有者一起工作,那么从它进行连接的尊重是什么?

最佳答案

一个 NIB 代表一个归档对象图。您可以加载它,该对象图将被重构。问题是,您通常希望/需要将新加载的对象图挂接到程序中已经存在的对象图中。您不希望它孤立无援,与其他一切脱节。

新加载的对象图可以通过几种方式连接到程序的其余对象图。一种方法是使用 NIB 中可用的代理对象集。有一个用于应用程序对象。另一个这样的代理对象是文件所有者。代理对象是在 NIB 中具有表示但实际上不包含在 NIB 中的事物。与 NIB 中的其他对象不同,代理所代表的对象不是在加载 NIB 时创建的,而是在加载 NIB 之前存在的。代理允许这些预先存在的对象与 NIB 中的对象之间的连接。这就是 NIB 中的新对象图可以连接到程序的现有对象图的方式。

MainMenu NIB 很不寻常。它在应用程序启动时由 Cocoa 自动加载,这意味着没有(不可能,真的)太多预先存在的对象。该 NIB 通常还包含应用程序委托(delegate)的实例,这是一种协调 Controller 。不过,通常其他类型的 NIB 不会包含协调 Controller 。 (它们确实包含中介 Controller ,如 NSArrayController,但这是不同的。)相反,协调 Controller 通常是在代码中创建的,而且通常它们负责加载 NIB。

例如,您可以使用 NSWindowController 作为窗口的协调 Controller 。该窗口将在 NIB 中定义。窗口 Controller 将在代码中实例化——无论哪个代码决定应该创建一个窗口——它都会加载 NIB。它也将是 NIB 的文件所有者。它将管理窗口和 NIB 的顶级对象。

如果您将文件所有者设置为 nil,那么 a) 此时您可能正在处理非常简单的 NIB,并且 b) 您可能正在从 NIB 中泄漏顶级对象你加载。

关于objective-c - xcode xib 文件中文件所有者的需求是什么?我可以在没有文件所有者的情况下做同样的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873138/

相关文章:

iphone - 打印应用程序当前堆栈跟踪的简单方法?

ios - 如何修复 IBOutlet 配置上的 nil 错误和调用 View Controller 时不显示 UI?

ios - 尝试以编程方式从一个 XIB 文件创建多个 View

iphone - SLComposeViewController addURL 问题 iOS7

ios - 使用里拉数据,如何在 objective-c 中编写条件分支

objective-c - 引用代码中的内部版本号或版本号

ios - 如何在 xib View Controller 中添加图像(swift3)

objective-c - 如何在 1 个单元格中放置 3 个图像

ios - AQGridView水平滚动时单元格消失无法锁定

swift - Cordova错误: Promise rejected with non-error: 'Error code 70 for command: