清醒.FromNib后,NSWindow为零

时间:2011-10-17 21:08:43

标签: objective-c cocoa interface-builder nsview nswindow

我有一个nib文件,其中包含一堆视图和自定义对象。其中一个对象是自定义控制器对象。在它的awakeFromNib方法中,我想访问包含所有这些内容的窗口。我不知道如何在这一点上获得窗口。但是,此自定义对象具有视图的出口。我知道你可以通过调用[nameOfView窗口]来获取窗口但是由于某种原因,此时,正在为窗口返回nil,即使视图不是nil。窗口在什么时候不是零?

作为旁注,如果我将窗口作为参数传递给从nib文件加载的自定义对象,我是否必须担心释放/保留它?内存管理如何使用从笔尖加载的对象中的这个NSWindow?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您将无法在笔尖加载过程中执行此操作:

  1. 某个控制器(让我们称之为主控制器)触发该nib文件的加载;
  2. awakeFromNib被发送到该nib文件中的对象,包括您的自定义控制器对象;
  3. 主控制器获取对nameOfView的引用(可能通过自定义控制器)并将其添加到窗口的视图层次结构中。
  4. 加载包含视图的nib文件不会自动将这些视图添加到窗口的视图层次结构中,这就是[nameOfView window]返回nil自定义控制器awakeFromNib实现的原因。由于在步骤1中有一个主控制器负责触发该nib文件的加载,我假设这个主控制器负责向窗口添加视图。让主控制器在发生这种情况时向自定义控制器发送消息,以便您的自定义控制器知道何时将nameOfView添加到窗口。