【问题标题】:Reference to subclassed NSWindowController returns its document - is this correct?对子类 NSWindowController 的引用返回其文档 - 这是正确的吗?
【发布时间】:2011-05-05 21:50:37
【问题描述】:

我是基于文档的应用程序的新手,因此我可能错过了一些基本的东西。我编写了一个基于文档的应用程序,它使用子类 NSWindowController 作为接口,使用子类 NSDocument 作为模型。根据文档,我在 makeWindowControllers 中初始化了 windowController 并加载了它的 xib。在界面生成器中,xib 将我的 windowController 子类设置为文件的所有者。在窗口中的视图中,我有一个 NSOutlineView 的子类,并且 NSOutlineView 数据源和委托也在 nib 中引用,并通过 IBOutlets 连接到 windowController。

根据文档,我应该可以通过 [windowController 文档] 从 OutlineView 数据源访问文档。但是,从 OutlineView 数据源引用 windowController(通过 IBOutlet)给了我文档!

这导致 OutlineView 数据源(它是 windowController 的 xib 中 NSObject 的子类)中的一些相当丑陋的代码来获取文档,例如:

-(MyDocument *)myDocument {
    MyDocument *theDocument = (MyDocument *)myWindowController;
    return theDocument;
}

头文件中的 IBOutlet 将 myWindowController 引用为:

IBOutlet MyWindowController *myWindowController

简而言之-为什么在这种情况下连接到 windowController 的 IBOutlet 会直接为我获取文档?上面的代码有效,但似乎不应该。

编辑:澄清

【问题讨论】:

  • 哪个类作为大纲视图数据源,在哪里创建这个类的实例?
  • 无法访问 nib 文件和源代码,我想不出您遇到此问题的原因。如果作为大纲视图数据源的类有一个连接到文件所有者的IBOutlet,那么它应该是窗口控制器实例。如果你愿意把你的项目上传到某个地方,我可以看看。
  • 感谢您的回复! outlineView 数据源是在 windowController 的 xib 中创建的 NSObject,通过 IBOutlet 连接到 File 的 Owner

标签: cocoa nsdocument iboutlet nswindowcontroller


【解决方案1】:

好的,我想出了这个问题的答案——不要在代码的另一部分不小心将 xib 的 File's Owner 设置为 NSDocument 而不是 windowController 并忘记你做了它!这会覆盖您之前在 xib 中设置的文件所有者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    相关资源
    最近更新 更多