【问题标题】:NSWindow is nil after awakeFromNibawakeFromNib 之后 NSWindow 为零
【发布时间】:2011-10-17 21:08:42
【问题描述】:

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

附带说明,如果我将窗口作为参数传递给从 nib 文件加载的自定义对象,我是否需要担心释放/保留它?在从 nib 加载的对象中,内存管理将如何与此 NSWindow 一起工作?

【问题讨论】:

  • 您的 nib 文件是否包含窗口?
  • 窗口是以编程方式创建的。

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


【解决方案1】:

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

  1. 某个控制器(我们称之为主控制器)触发了该 nib 文件的加载;
  2. awakeFromNib 被发送到该 nib 文件中的对象,包括您的自定义控制器对象;
  3. 主控制器获取对nameOfView 的引用(可能通过自定义控制器)并将其添加到窗口的视图层次结构中。

加载包含视图的 nib 文件不会自动将这些视图添加到窗口的视图层次结构中,这就是为什么 [nameOfView window] 返回 nil 自定义控制器的 awakeFromNib 实现的原因。由于在步骤 1 中有一个主控制器负责触发该 nib 文件的加载,我假设这个主控制器负责向窗口添加视图。发生这种情况时让主控制器向自定义控制器发送消息,以便您的自定义控制器知道 nameOfView 何时添加到窗口中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多