当大多数app'文档'不是基于文件的时候,NSDocument是正确的选择吗?

时间:2012-01-25 16:41:38

标签: macos cocoa nsdocument

我正在编写一个操作数据库文件的Mac Cocoa应用程序,可以使用NSDocument技术轻松实现,因为它们直接与磁盘文件相关。

然而,大多数应用程序将操纵此数据库中的项目。当用户打开数据库项时,应显示一个新窗口以允许查看,编辑和保存该项,因此数据库项不直接与磁盘文件相关。请注意,撤消和重做在这里是合适的。

对数据库窗口和数据库项目窗口使用NSDocument技术是否合适,还是有更好的方法?

2 个答案:

答案 0 :(得分:3)

我认为使用NSDocument将是一个很好的选择。它允许您利用大多数提供的功能,例如NSDocumentController,撤消支持,窗口管理等。您将必须覆盖某些方法,例如加载和保存。可能很难让“打开最近”菜单对这些文档正常工作(可能使用自定义URL方案?)。使用NSDocument的缺点是......我无法想到。你必须从头开始编写所有内容,将它们集成到应用程序的其余部分会更加困难。

答案 1 :(得分:1)

我构建了基于NSDocument的应用程序 - 实际上是NSPersistentDocument,因为它可以访问Core Data服务来存储我的对象图。它对我很有用,我发现没有任何缺点。

当您考虑使用NS(Persistent)Document时,您必须提供某种机制来将文档实例传递给您将构建的各种控制器,以管理视图/窗口及其相关数据。我通过创建一个通用的View控制器类来实现这一点,该控制器类能够保存对我的NSPersistentDocument实例的引用。我的所有视图控制器都是这个通用控制器的子类,因此能够轻松访问核心数据服务。

我的应用管理15个核心数据实体,每个实体的数量从数百到数十万个实例不等。不是原始问题的一部分,但您可能需要考虑将Core Data用于对象持久性。我发现在构建我的应用程序时(以前使用过PHP,Java和各种数据库层,通常对生产力没有太大贡献)可以节省时间。