具有多种文档类型的基于Cocoa文档的应用程序

时间:2010-01-14 15:16:11

标签: cocoa macos document-based

我想在Cocoa中构建一个基于文档的应用程序,但它可以创建和处理不同类型的文档。在一个应用程序中考虑Word,Excel,Powerpoint,只是简单得多。但是每个窗口都会根据文档的类型而有所不同。

对于存储,我将使用CoreData。我想添加一个指定文档类型的字段,因为它们应该都有相同的文件结尾。

因此,如果不创建几个独立的应用程序,最好的方法是什么?如何在Interface Builder中创建它?我该如何编写代码?

我不需要详细的源代码或任何东西,只是关于如何做到这一点的一般想法,我会想出其余的。

提前致谢!

2 个答案:

答案 0 :(得分:14)

这是Cocoa Document系统明确设计的目的。 Apple provides documentation,但这里是重点。

  • 每种文件都是NSDocument的子类。如果您使用的是核心数据,请将您的课程改为NSPersistentDocument。 (Apple对如何在基于文档的应用程序中使用Core Data有basic tutorial
  • 使用Info.plist告诉Cocoa应用程序可以打开的文档类型以及要使用的文档类。
  • 每个NSDocument子类都有一个或多个与之关联的NSWindowController个对象,每个对象代表一个窗口。如果您只有一个窗口,则不必继承NSWindowController。您可以将UI逻辑放在文档子类中。但是,为了更清晰的代码,我强烈建议继承NSWindowController
  • NSWindowController(如果您决定不继承NSDocument,则NSWindowController)可以从您在Interface Builder中构建的NIB加载窗口。实际上,这是创建文档窗口的推荐方法。

希望这能让您大致了解如何在Cocoa中解决这个问题。

答案 1 :(得分:1)

您首先要为每种文档类型创建一个NIB;每个都有一个NSDocument子类(使用现有的基于文档的app-example-NIB进行设置)。然后,您可以设置这些类来处理应用程序属性列表中的各种文档类型;在我记忆中,有一些有用的工具可以隐藏在XCode的某个地方。

一旦运行起来,大部分细节都应该自动处理;但你可能仍然需要稍微捏一下文件菜单,我似乎记得在设置默认文档类型等方面存在一些问题。

总的来说,这并不比为单一类型的文档创建应用程序复杂得多。

PS:请注意确保您确实需要不同的文件类型;有时候,对同一个文件有几个不同的视图可能更合适。只是一个想法。 :)