我正在开发我的第一个真正意义上的可可应用。它是一个基于文档的应用程序,使用核心数据进行持久存储。使用Xcode "New project“模板选项,我的项目从几个默认类开始:
我从那里获得了设计,所有的设计都运行得很好,但是通过另一个问题,我遇到了一个我不知道的Cocoa类NSDocumentController。显然,该类为管理基于文档的应用程序中的文档类提供了默认逻辑。
我的问题是,这门课如何进入我的应用程序--如果有的话--我需要它吗?此时,我使用EventDocument类作为一种顶级控制器。它从菜单(带有选项la iTunes的树视图)中获取用户选择,打开处理这些选项的不同视图/控制器,并在托管对象上下文中传递。如果NSDocumentController是“要走的路”,为什么苹果不把它作为项目模板的一部分来生成呢?
发布于 2011-12-02 07:31:06
我相信您误解了NSDocumentController的目标,可能是因为它的名称类似于NSWindowController和NSViewController。
在Cocoa中,控制器中介视图和模型。在处理windows时,控制器通常是NSWindowController的子类,而在视图的情况下,则是NSViewController的子类。
在基于文档的体系结构中,NSDocument类是表示文档的模型与相应的视图和控制器之间的中介。本质上,它负责基于外部表示重新创建模型,并提供与模型和视图相对应的附加控制器行为的某种方式。这方面经常使用两种设计:
在许多(大多数?)在不需要NSDocumentController子类的情况下,应用程序的控制器部分将位于窗口控制器、视图控制器或NSDocument子类中。尽管如此,在某些情况下,它可能是必要的,正如文档中所解释的那样
通常,您不应该需要子类NSDocumentController。几乎所有可以通过子类完成的事情都可以通过应用程序的委托轻松地完成。但是,如果需要,可以对NSDocumentController进行子类分类。 例如,如果您需要自定义Open,那么显然需要一个NSDocumentController子类。您可以重写NSDocumentController方法runModalOpenPanel:forTypes:以自定义面板或添加附件视图。addDocument:和removeDocument:方法提供给希望知道文档何时打开或关闭的子类。
https://stackoverflow.com/questions/8335485
复制相似问题