【问题标题】:Is NSDocument the correct choice when most app 'documents' are not file-based?当大多数应用程序“文档”不是基于文件时,NSDocument 是正确的选择吗?
【发布时间】:2023-03-07 01:08:02
【问题描述】:

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

但是,大多数应用都会操作此数据库中的项目。当用户打开一个数据库项目时,应该会出现一个新窗口以允许查看、编辑、保存该项目,因此该数据库项目不直接与磁盘文件相关。请注意,此处适合撤消和重做。

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

【问题讨论】:

    标签: macos cocoa nsdocument


    【解决方案1】:

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

    【讨论】:

    • 非常感谢 - 看起来就是这样 :) 你能详细说明自定义 URL 方案吗?您是指一种唯一标识数据库项的方法,以便在尝试打开它时选择“数据库项文档类”?
    • 没错。您定义一个自定义方案并指明您的应用程序支持它。 URL 将包含数据库本身的路径或 URL,以及一些标识符,该标识符确定它所引用的数据库中的哪个项目。然后,您可以使用该方案设置文档的 URL,以便您可以直接打开项目,例如从“打开最近的”菜单。
    • 太棒了——想出一个唯一的数据库项标识符完全没有问题。再次感谢。
    【解决方案2】:

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

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

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

    【讨论】:

    • 非常感谢 - 我担心 Core Data 不是一个选项 - 读/写数据库(及其项目)的代码已经在 C++ 静态库中实现,我需要使用它.
    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多