IBOutlet何时初始化?

Hov*_*nky 5 macos cocoa iboutlet

我通过Interface Builder为文本视图设置了一个插座.文本视图加载正常,但我不能以编程方式访问它的任何属性,因为插座总是nil.

什么时候实例化?即使在我applicationDidFinishLoading被召唤之后,它仍然没有"活着"或未归档.

Pet*_*sey 12

出口不会实例化,因为出口是变量(或属性).

当加载该nib时,nib中的对象被实例化,并且在创建对象之后但之前awakeFromNib被发送到所有相关对象之前,它们被尽可能地分配给每个出口.

换句话说,nib加载按以下顺序执行以下所有操作:

  1. 创建或重新创建存储在nib中的所有对象.(这不包括文件所有者,第一响应者以及其他外部和虚构对象.)
  2. 将nib中连接的每个outlet属性设置为与nib连接的同一nib中的对象.(例如:视图控制器view到顶层视图的出口.)
  3. 发送awakeFromNib到nib中的对象,并且(在Cocoa中)也发送到File的所有者(例如,窗口控制器).

您的问题由#2回答.

资源编程指南提供了更多信息.Cocoa和Cocoa Touch之间的细节略有不同,特别是关于哪些对象是发送awakeFromNib消息而哪些不是.

什么时候实例化?即使在我applicationDidFinishLoading被召唤之后,它仍然没有"活着"或未归档.

文字视图不是?

它可能是,你只是没有连接插座.在笔尖中检查这个.

另一种可能性:您在另一个笔尖中创建了文本视图,而不是创建应用程序委托的那个(如果您甚至在笔尖中创建了应用程序委托),并且您没有将视图连接到右侧的插座宾语.也许您在文本视图的笔尖中创建了第二个应用程序委托; 这个应用程序委托实际上并不是应用程序的委托,这就是真正的应用程序委托没有看到文本视图的原因 - 你将文本视图提供给冒名顶替者,而不是真正的McCoy.