Cocoa:NIB 文件创建的实例的 var 名称是啥?

Posted

技术标签:

【中文标题】Cocoa:NIB 文件创建的实例的 var 名称是啥?【英文标题】:Cocoa: what is the var name of an instance created by a NIB file?Cocoa:NIB 文件创建的实例的 var 名称是什么? 【发布时间】:2010-02-04 07:22:24 【问题描述】:

当 Cocoa NIB 文件实例化自定义控制器对象的实例时,该自定义控制器实例分配给的变量的名称是什么?

如果不清楚,如果您手动创建该类的实例,您会这样做:

MyControllerClass *myVar = [[MyControllerClass alloc] init];

在幕后执行此操作时,NIB 使用了什么等效的“myVar”?

【问题讨论】:

你想做什么?可能是您以错误的方式处理此问题。祝你好运! 【参考方案1】:

一旦编译了应用程序,就没有变量名这样的东西,所以这个问题没有多大意义。在您的示例中,myVar 只是您(程序员)的一个方便标签,一旦您的源代码编译成二进制代码,它就不会以任何方式存在。

当您将一个对象放入一个 nib 文件中时,它会在运行时被归档然后取消归档。如果您希望能够获取对已存档在 nib 文件中的对象的引用,则需要使用 outlet,这意味着您在 nib 文件中存在的类中声明 IBOutlet 实例变量,并且然后将该插座连接到要在 Interface Builder 中引用的 nib 中的对象。实例变量与您在示例中声明的堆栈变量不同,可以在运行时引用。

通常,您会拥有一个“拥有”笔尖的对象。通常 nib 由 NSWindowControllerNSViewController 的实例加载,并且窗口或视图控制器在 nib 文件中表示为 File's Owner。如果您在窗口/视图控制器中声明了出口,则可以将文件所有者的出口连接到 Interface Builder 中的对象。

因此,为了澄清,您需要从同一笔尖中的其他对象引用您笔尖中的对象。第二个对象在实例变量上使用IBOutlet 关键字声明了一个出口,如下所示:

@interface SomeOtherObject : NSObject

    IBOutlet SomeObject* anObject;

@end

在 Interface Builder 中,您可以将SomeOtherObject 实例的anObject 出口连接到第一个SomeObject 实例。您可以通过控制从一个对象拖动到另一个对象来执行此操作,也可以在 Interface Builder 检查器的连接面板中执行此操作。

然后,您可以通过 SomeOtherObject 代码中的变量名称 anObject 引用您的 SomeObject 实例。

【讨论】:

【参考方案2】:

在您的控制器类中实现awakeFromNib 方法 - 在 nib 完成加载后立即调用它,并且您的控制器实例可以在“self”变量中找到。

【讨论】:

【参考方案3】:

@tedge(我无法对你的回答做出 cmets):

您能否为刚开始学习 Cocoa 的人澄清一下。学习 Apple 货币转换器教程。

我在现有的 ConverterController 类中实现了 awakeFromNib 方法。 (我很快就会学会做的事情!)

应用程序启动并自动实例化 ConverterController 的实例。

awakeFromNib 会告诉我关于该正在运行的实例的什么信息(除了它可以使用的情况)——以及“self”的什么语法让它泄露这些信息?

【讨论】:

【参考方案4】:

...自定义控制器实例分配给的变量的名称是什么?

这是您在声明该变量时给它起的任何名称。

IB 不会为您创建变量。听起来您正在寻找outlet,这是您创建的一个变量,IB 知道并允许您将对象插入其中,从而设置该变量。

(您实际上可以从 IB 创建 outlet,在现代运行时,这应该真正创建 outlet,而不仅仅是在 nib 中声明一个不存在的 outlet。即使这样, 创建出口 [in IB],给它起个名字。)

【讨论】:

【参考方案5】:

我认为 Nibbles 的困惑在于如何从代码中引用仅在 NIB 文件中定义的变量。

答案是,通常你在代码和 NIB 中有一个自定义控制器类(或委托类)A,如果你有另一个类或控制器 B 只在 NIB 中定义,只需在 A 中设置一个指向 B 的插座. 由于 A 可以在代码中的任何位置使用,因此 B 也可以通过 A 访问。

我也有这个问题。

【讨论】:

以上是关于Cocoa:NIB 文件创建的实例的 var 名称是啥?的主要内容,如果未能解决你的问题,请参考以下文章

nib 本地化时 Cocoa 无法加载窗口 nib 文件

Cocoa (Xcode 4),从另一个 NIB 更改一个 NIB 上的标签

从 Cocoa 中的其他 nib(即 Interface Builder)加载 nib

Cocoa 多次同时加载 nib 模板

Cocoa 加载 ViewNib

Cocoa:使用 nib 加载 NSViewController