我通过 Interface Builder 为文本视图设置了一个出口。文本视图加载正常,但是我无法以编程方式访问它的任何属性,因为插座始终是nil
.
它什么时候实例化?即使在我applicationDidFinishLoading
被调用后,它仍然不是“活着的”或未存档的。
出口不会实例化,因为出口是一个变量(或属性)。
nib 中的对象在加载该 nib 时被实例化,并在创建对象之后但在awakeFromNib
发送给所有相关对象之前尽快将它们分配给每个出口。
换句话说,nib 加载按以下顺序执行以下所有操作:
view
到顶级视图的出口。)awakeFromNib
到 nib 中的对象,并且(在 Cocoa 中)也发送到文件的所有者(例如,窗口控制器)。#2回答了您的问题。
资源编程指南有更多信息。Cocoa 和 Cocoa Touch 之间的细节略有不同,尤其是在哪些对象被发送awakeFromNib
消息和哪些对象不发送消息方面。
它什么时候实例化?即使在我
applicationDidFinishLoading
被调用后,它仍然不是“活着的”或未存档的。
文本视图不是吗?
可能是,您只是没有连接插座。检查笔尖。
另一种可能性:您在另一个 nib 中创建了文本视图,而不是创建应用程序委托的那个(如果您甚至在 nib 中创建了应用程序委托),并且您没有将视图连接到右侧的插座目的。也许您在文本视图的 nib 中创建了第二个应用程序委托;这个应用程序代理实际上并不是应用程序的代理,这就是为什么真正的应用程序代理看不到文本视图的原因——您将文本视图提供给了冒名顶替者,而不是真正的 McCoy。
确保您已将 IBoutlet 链接到正确的文件所有者。单击文件所有者并单击身份检查器以查看文件所有者指向正确的文件。
应该在初始化包含 .h 中的 IBoutlets 的视图控制器(也称为文件所有者)时创建 IBoutlets。