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

3
我想在Cocoa中构建一个基于文档的应用程序,以便可以创建和处理不同类型的文档。像Word、Excel、Powerpoint这样的所有应用程序都集成到一个应用程序中,只是简单得多。但每个窗口将根据文档类型而不同。

为了存储,我将使用CoreData。我考虑添加一个字段来指定文档类型,因为它们都应该具有相同的文件扩展名。

因此,在不创建多个独立应用程序的情况下,最好的方法是什么?如何在Interface Builder中创建此内容?如何编写代码?

我不需要详细的源代码或任何东西,只需要一般的思路,我会自己解决剩下的问题。

提前致谢!

2个回答

15

这正是Cocoa文档系统明确设计的功能。苹果公司提供文档,以下是要点:

  • 每种类型的文档都是NSDocument的子类。如果您使用Core Data,请基于NSPersistentDocument创建类。(苹果公司有一个基本教程,介绍如何在基于文档的应用程序中使用Core Data)
  • 使用Info.plist告诉Cocoa应用程序可以打开哪些类型的文档以及使用哪个文档类。
  • 每个NSDocument子类都与一个或多个NSWindowController对象相关联,每个对象表示一个窗口。如果您只需要一个窗口,则不必对NSWindowController进行子类化。您可以将UI逻辑放入文档子类中。但是,为了编写更清晰的代码,我强烈建议对NSWindowController进行子类化。
  • NSWindowController(如果您决定不对其进行子类化,则包括NSDocument)可以从Interface Builder中构建的NIB加载窗口。实际上,这是创建文档窗口的推荐方法。

希望这样能给您提供如何在Cocoa中处理这个问题的一般思路。


+1 表示我想表达的意思,但你用更清晰易懂的方式表达了出来。 :) - Williham Totland
那个教程现在已经50%没用了,因为苹果已经从Xcode中删除了其所依赖的一半技术。有人有替代品吗?(到目前为止,苹果似乎并没有在意 - 这几乎就像他们已经放弃了Core Data :( ) - Adam
1
苹果完全支持核心数据(Core Data)。我没有看到任何他们放弃它的迹象。所有工具仍然存在于Xcode 4中,但是用户界面确实已经改变。哪些教程部分是无用的? - Alex

1

首先,您需要为每种文档类型创建一个 NIB 文件;并为每个文档类型创建一个 NSDocument 子类(在此处使用现有的基于文档的应用程序示例 NIB 进行设置)。然后,在应用程序的属性列表中设置这些类来处理您的各种文档类型;据我所记,XCode 中有一些有用的工具可以隐藏这些。

一旦完成上述步骤,大部分细节都应该自动处理;但您可能仍然需要稍微调整文件菜单,并且我似乎记得设置默认文档类型等方面存在一些问题。

总体而言,它并不比为单一文档类型创建应用程序复杂多少。

附注:请确保您真正需要不同的文件类型;有时,拥有同一文件的几个不同视图可能更合适。只是一个想法。 :)


所以如果我理解正确的话,我将我的数据存储在一个文件格式中,根据文档类型,我只是以不同的方式显示它?听起来很容易。但是如何创建不同的窗口类型呢?例如,它们需要有不同的工具栏。 - ron
我写的听起来有点混乱。我的意思是当我只有一个NSDocument类时,如何将其与不同的窗口类型关联?或者我也应该只有一个窗口,并更改工具栏、所有面板等? 但这是否符合Cocoa的标准行为?比如“自定义工具栏”菜单功能? - ron
我并不是说你一定想要只有一个类型;我只是提出这个想法。如果你有这些担忧,你可能需要不同的类型。 - Williham Totland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接