Objective c 需要什么文件';xcode xib文件中的所有者是谁?如果没有文件';谁的主人?

Objective c 需要什么文件';xcode xib文件中的所有者是谁?如果没有文件';谁的主人?,objective-c,xcode,xib,nib,Objective C,Xcode,Xib,Nib,为什么我应该设置文件所有者的类标识,而不是nib中显示的自定义对象的类标识,并从中建立连接?如果我将文件的所有者设置为零会发生什么? 对我来说,nil文件的所有者的一切都很好,那么与它进行连接的区别是什么呢?文件的所有者是包含该视图的所有iboutlet和ibaction的文件。例如,如果您有一个类“ViewController”,并且它包含一个IBOutlet UIButton*按钮和-(iAction)ChangeViewWhenButton:(id)sender,则连接插座和操作的唯一方法

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

文件的所有者是包含该视图的所有iboutlet和ibaction的文件。例如,如果您有一个类“ViewController”,并且它包含一个
IBOutlet UIButton*按钮
-(iAction)ChangeViewWhenButton:(id)sender
,则连接插座和操作的唯一方法是将“ViewController”设置为视图文件的所有者

我相对确定类标识是文件所有者的同义词

此外,这些链接可能会有所帮助:


NIB表示存档的对象图。您可以加载它,对象图将被重建。最重要的是,您通常希望/需要将新加载的对象图连接到程序中已经存在的对象图中。你不想让它与其他一切分离

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

主菜单笔尖是不寻常的。Cocoa会在应用程序启动时自动加载它,这意味着预先存在的对象(实际上不可能)没有太多内容。该NIB通常还包含一个app委托实例,它是一种协调控制器。但是,通常其他类型的NIB不包含协调控制器。(它们确实包含中介控制器,如
NSArrayController
,但这是不同的。)相反,协调控制器通常是在代码中创建的,并且通常负责加载NIB

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


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

nib中的对象可以引用nib之外的对象,反之亦然。(还有一些更复杂的方法可以做到这一点,但它们没有被经常使用。)如果不需要这样做,就不需要使用文件的所有者

对于主应用程序,文件的所有者是应用程序对象。如果您的所有应用程序逻辑都在nib中实例化的自定义类中,并且如果您使用“first responder”发送到应用程序的操作消息,则可能不需要与它建立连接。这没关系

如果您有一个文档窗口或popover或其他东西,那么文件的所有者通常是正在查看的对象,因此能够将ui附加到它是非常有用的。您可能会多次加载同一个nib,每个nib都由该类的不同实例“拥有”——不同的文档或检查过的对象或其他东西


(基本上,文件的所有者就是nib加载方法中传递给“owner:”参数的任何对象。)

在interface builder的左侧,我们有两个部分。占位符和对象。Lest说我们在nib中创建了一个MyView类。该类出现在Objects部分,我可以与nib建立outlet操作连接。如果将文件的所有者类设置为MyView,则可以进行相同的连接。这两种情况的区别是什么?ThanksIt对于拥有笔尖的视图来说是非常不寻常的。此外,您将为两个不同的对象建立连接。就好像你问过“我可以设置一个对象的属性。我也可以设置另一个对象的属性。有什么区别?”如果你为一个实际在NIB中的视图建立连接,那么这就是连接的对象。如果您连接到文件的所有者,那么在加载NIB时指定为其所有者的对象就是连接的对象。显然,所有者不能是NIB中的任何对象。如果你能回答我对Ken的评论,那就太好了:)