gpt4 book ai didi

xcode - NSDocumentController 如何插入我的基于文档的应用程序?

转载 作者:行者123 更新时间:2023-12-03 16:10:37 26 4
gpt4 key购买 nike

我正在构建我的第一个严肃的 Cocoa 应用程序。它是一个基于文档的应用程序,使用核心数据进行持久存储。使用 Xcode“新项目”模板选项,我的项目以几个默认类开始:

  • MainMenu.xib(我的应用的主菜单)
  • EventDocument.xib(我的应用程序的主窗口)
  • EventDocument.h 和 EventDocument.m(持久文档类)

我从那里借鉴了设计,一切都工作得相当好,但是通过 another question我遇到了一个我不知道的 Cocoa 类 NSDocumentController。此类显然提供了在基于文档的应用程序中管理文档类的默认逻辑。

我的问题是这个类如何插入我的应用程序 - 如果有的话 - 我需要它吗?此时,我使用 EventDocument 类作为一种顶级 Controller 。它从菜单中获取用户选项(带有 iTunes 选项的 TreeView ),调出处理这些选项的不同 View / Controller ,并传递托管对象上下文。如果 NSDocumentController 是“可行的方法”,为什么 Apple 不将其生成为项目模板的一部分?

最佳答案

我相信你误解了 NSDocumentController 的目标,可能是因为它的名称类似于 NSWindowController 和 NSViewController。

在 Cocoa MVC 中, Controller 协调 View 和模型。在处理窗口时, Controller 通常是 NSWindowController 的子类,而对于 View 来说, Controller 是 NSViewController 的子类。

在基于文档的架构中,NSDocument类是表示文档的模型与相应的 View 和 Controller 之间的中介。本质上,它负责根据外部表示重新创建模型,并提供某种方法来附加与模型和 View 相对应的 Controller 行为。通常使用两种设计:

  • NSDocument 子类有效地充当窗口(也可能是 View ) Controller - 例如,通过实现 IBActions。这应该适用于简单的应用程序,但它很快就会导致 NSDocument 子类变得臃肿,处理的内容超出了应有的范围。 documentation说:

    The default Document-based Application project template does not subclass NSWindowController. You do not need to subclass NSWindowController if you are writing a simple application. However, if you are writing an application with more advanced requirements, you will almost certainly want to do so.

  • NSDocument 子类创建自定义窗口 Controller ,进而实现 Controller 行为,也可能使用 View Controller 。

在许多(大多数?)情况下,不需要 NSDocumentController 子类 - 应用程序的 Controller 部分将位于窗口 Controller 、 View Controller 或 NSDocument 子类内。也就是说,在某些情况下可能有必要,如 documentation 中所述。 :

Usually, you should not need to subclass NSDocumentController. Almost anything that can be done by subclassing can be done just as easily by the application’s delegate. However, it is possible to subclass NSDocumentController if you need to.

For example, if you need to customize the Open panel, an NSDocumentController subclass is clearly needed. You can override the NSDocumentController method runModalOpenPanel:forTypes: to customize the panel or add an accessory view. The addDocument: and removeDocument: methods are provided for subclassers that want to know when documents are opened or closed.

关于xcode - NSDocumentController 如何插入我的基于文档的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com