我想在Cocoa中构建一个基于文档的应用程序,但它可以创建和处理不同类型的文档。在一个应用程序中考虑Word,Excel,Powerpoint,只是简单得多。但是每个窗口都会根据文档的类型而有所不同。
对于存储,我将使用CoreData。我想添加一个指定文档类型的字段,因为它们应该都有相同的文件结尾。
因此,如果不创建几个独立的应用程序,最好的方法是什么?如何在Interface Builder中创建它?我该如何编写代码?
我不需要详细的源代码或任何东西,只是关于如何做到这一点的一般想法,我会想出其余的。
提前致谢!
答案 0 :(得分:14)
这是Cocoa Document系统明确设计的目的。 Apple provides documentation,但这里是重点。
NSDocument
的子类。如果您使用的是核心数据,请将您的课程改为NSPersistentDocument
。 (Apple对如何在基于文档的应用程序中使用Core Data有basic tutorial)NSDocument
子类都有一个或多个与之关联的NSWindowController
个对象,每个对象代表一个窗口。如果您只有一个窗口,则不必继承NSWindowController
。您可以将UI逻辑放在文档子类中。但是,为了更清晰的代码,我强烈建议继承NSWindowController
。 NSWindowController
(如果您决定不继承NSDocument
,则NSWindowController
)可以从您在Interface Builder中构建的NIB加载窗口。实际上,这是创建文档窗口的推荐方法。希望这能让您大致了解如何在Cocoa中解决这个问题。
答案 1 :(得分:1)
您首先要为每种文档类型创建一个NIB;每个都有一个NSDocument
子类(使用现有的基于文档的app-example-NIB进行设置)。然后,您可以设置这些类来处理应用程序属性列表中的各种文档类型;在我记忆中,有一些有用的工具可以隐藏在XCode的某个地方。
一旦运行起来,大部分细节都应该自动处理;但你可能仍然需要稍微捏一下文件菜单,我似乎记得在设置默认文档类型等方面存在一些问题。
总的来说,这并不比为单一类型的文档创建应用程序复杂得多。
PS:请注意确保您确实需要不同的文件类型;有时候,对同一个文件有几个不同的视图可能更合适。只是一个想法。 :)