IBOutlet何时初始化?

时间:2013-04-21 17:14:25

标签: macos cocoa iboutlet

我通过Interface Builder为文本视图设置了一个插座。文本视图加载正常,但我无法以编程方式访问它的任何属性,因为插座始终为nil

什么时候实例化?即使在我的applicationDidFinishLoading被调用之后,它仍然没有“活着”或未归档。

2 个答案:

答案 0 :(得分:12)

插座不会实例化,因为插座是变量(或属性)。

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

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

  1. 创建或重新创建存储在nib中的所有对象。 (此排除了文件的所有者,第一响应者以及其他外部和虚构对象。)
  2. 将nib中连接的每个outlet属性设置为nib连接到的同一nib中的对象。 (例如:视图控制器的view出口到顶层视图。)
  3. awakeFromNib发送到nib中的对象,并(在Cocoa中)也发送到文件所有者(例如,窗口控制器)。
  4. 您的问题由#2回答。

    The Resource Programming Guide has more information。 Cocoa和Cocoa Touch之间的细节略有不同,特别是关于哪些对象发送awakeFromNib消息以及哪些不是。{/ p>

      

    什么时候实例化?即使在我的applicationDidFinishLoading被调用之后,它仍然没有“活着”或未归档。

    文字视图不是?

    可能是,你只是没有连接插座。在笔尖中检查一下。

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

答案 1 :(得分:0)

确保已将IBoutlet链接到正确的文件所有者。单击“文件所有者”,然后单击“身份检查器”以查看文件所有者是否指向正确的文件。

  1. 单击Interfacebuilder-> Objects
  2. 下的对象
  3. 在Outlets下,确保显示IBoutlet的属性。如果未显示文件所有者可能是错误的。
  4. 将出口链接到对象 - 单击 - >拖动行到对象
  5. 当初始化包含.h中的IBoutlet的视图控制器-aka文件所有者时,应创建IBoutlet。