2012-01-25 27 views
4

我正在写一个Mac Cocoa应用程序,它将操作数据库文件,这些文件可以使用NSDocument技术轻松实现,因为它们与磁盘文件直接相关。当大多数应用程序的“文档”不是基于文件时,NSDocument是正确的选择吗?

但是,大部分的应用程序会操纵这个数据库中的项目。当用户打开一个数据库项目时,应该出现一个新窗口以允许查看,编辑和保存项目,以便数据库项目不直接与磁盘文件相关。请注意,撤消和重做在这里是适当的。

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

回答

3

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

+0

非常感谢 - 看起来像那样:)你能详细说明一下自定义URL方案吗?您是否指的是一种唯一标识数据库项目的方法,以便在尝试打开数据库项目时选择“数据库项目文档类”? – trojanfoe

+0

正是。您定义一个自定义方案,并指出您的应用程序支持它。该URL将包含数据库本身的路径或URL,以及一些标识符,用于确定它引用的数据库中的哪个项目。然后,您可以使用该方案设置文档的URL,以便您可以直接打开该项目,例如从“打开最近”菜单。 – ughoavgfhw

+0

太棒了 - 不会有任何问题提出一个独特的*数据库项目*标识符。再次感谢。 – trojanfoe

1

我构建我的应用程序基于NSDocument - 嗯,实际上NSPersistentDocument,因为它允许访问核心数据服务来存储我的对象图。它对我很好,我发现没有缺点。

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

我的应用程序管理15个核心数据实体,每个实体的卷数量从几百到几十万个不等。不是你原来的问题的一部分,但你可能想考虑使用核心数据的对象持久性。我发现它在构建我的应用程序时实时节省(以前曾使用过PHP,Java和各种DB层,这些层通常对生产力没有多大贡献)。

+0

非常感谢 - 核心数据不是一个选项我害怕 - 读/写数据库(及其项目)的代码已经在C++静态库中实现,我将需要使用它。 – trojanfoe

相关问题