【问题标题】:Loading NIB file using NSWindowController doesn't set window or top level objects使用 NSWindowController 加载 NIB 文件不会设置窗口或顶级对象
【发布时间】:2009-05-13 08:38:34
【问题描述】:

我有一个使用 NSWindowController initWindowNibName 加载的 NIB 文件。 NIB 文件包含一个 NSWindow。它的文件所有者属于 NSWindowController 类。我已将文件所有者的窗口插座连接到窗口。

当我加载 NIB 时,[windowController window] 为 nil,顶级对象数组也是如此。但是,我仍然可以调用 [windowController showWindow:nil] 并成功显示窗口​​。

这里似乎有些不对劲。我已经确认连接和文件所有者是好的。事实上,当我在调试器中查看 windowController 实例的 _owner 值时,我发现它正按预期指向自身。

对可能发生的事情有什么建议吗?

谢谢!

【问题讨论】:

    标签: cocoa interface-builder


    【解决方案1】:

    当您说[windowController window] 为零时,您如何确定这一点?在第一次调用 -window 之前,NIB 才真正加载。因此,如果您正在查看调试器,您将看到 _window 为 nil,直到您调用 showWindow:。之后,_window 应该有一个非零值。

    【讨论】:

    • 是的,你是对的。在我调用 [控制器窗口] 之前,我断言窗口不为空。我仍然不习惯 Cocoa 在幕后为你做的很多“魔法”……它比我聪明,或者让我看起来比我想象的更笨。
    • 我在 Cocoa 中开发的时间越长,我就越了解它的魔力是多么微不足道(KVO 除外;即使你理解了方法调配也是一种魔力)。诀窍是不依赖任何内部实现细节。不要假设您知道 _window 的含义。它有一个下划线;这不关你的事。公共接口的行为非常一致。不要试图在他们周围偷偷摸摸。祝你好运!
    【解决方案2】:

    你有继承 NSWindowController 吗?

    当我这样做时,我使用一个名为 MyWindowController 的 NSWindowController 并在子类的 init 中调用 initWithWindowNibName:

    然后,设置 File's Owner 指向 MyWindowController 类。

    【讨论】:

    • 你不需要继承 NSWindowController。这是允许的,但不是必需的,也不应该解决psychotik的问题。
    • @user523234,是的,感谢他们和我的提问者解决了我的问题!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多