首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在基于文档的应用程序中插入NSDocumentController?

如何在基于文档的应用程序中插入NSDocumentController?
EN

Stack Overflow用户
提问于 2011-12-01 01:27:58
回答 1查看 3.6K关注 0票数 6

我正在开发我的第一个真正意义上的可可应用。它是一个基于文档的应用程序,使用核心数据进行持久存储。使用Xcode "New project“模板选项,我的项目从几个默认类开始:

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

我从那里获得了设计,所有的设计都运行得很好,但是通过另一个问题,我遇到了一个我不知道的Cocoa类NSDocumentController。显然,该类为管理基于文档的应用程序中的文档类提供了默认逻辑。

我的问题是,这门课如何进入我的应用程序--如果有的话--我需要它吗?此时,我使用EventDocument类作为一种顶级控制器。它从菜单(带有选项la iTunes的树视图)中获取用户选择,打开处理这些选项的不同视图/控制器,并在托管对象上下文中传递。如果NSDocumentController是“要走的路”,为什么苹果不把它作为项目模板的一部分来生成呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-02 07:31:06

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

在Cocoa中,控制器中介视图和模型。在处理windows时,控制器通常是NSWindowController的子类,而在视图的情况下,则是NSViewController的子类。

在基于文档的体系结构中,NSDocument类是表示文档的模型与相应的视图和控制器之间的中介。本质上,它负责基于外部表示重新创建模型,并提供与模型和视图相对应的附加控制器行为的某种方式。这方面经常使用两种设计:

  • NSDocument子类有效地充当窗口(可能也是视图)控制器--例如,通过实现IBActions。这应该适用于简单的应用程序,但它会很快导致一个臃肿的NSDocument子类,它处理的比它应该处理的更多。文档说: 默认的基于文档的应用程序项目模板不包含子类NSWindowController。如果您正在编写一个简单的应用程序,则不需要对NSWindowController进行子类分类。但是,如果您正在编写具有更高级需求的应用程序,那么您几乎肯定希望这样做。
  • NSDocument子类创建自定义窗口控制器,从而实现控制器行为,并可能使用视图控制器。

在许多(大多数?)在不需要NSDocumentController子类的情况下,应用程序的控制器部分将位于窗口控制器、视图控制器或NSDocument子类中。尽管如此,在某些情况下,它可能是必要的,正如文档中所解释的那样

通常,您不应该需要子类NSDocumentController。几乎所有可以通过子类完成的事情都可以通过应用程序的委托轻松地完成。但是,如果需要,可以对NSDocumentController进行子类分类。 例如,如果您需要自定义Open,那么显然需要一个NSDocumentController子类。您可以重写NSDocumentController方法runModalOpenPanel:forTypes:以自定义面板或添加附件视图。addDocument:和removeDocument:方法提供给希望知道文档何时打开或关闭的子类。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8335485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档