关系数据/待办事项列表的 NSDocument?

NSDocument for relational data / todo list?

我想创建一个 OS X 应用程序,用户可以在其中编辑类似于待办事项列表的项目 - 每个项目都有文本、状态 (done/todo)、创建日期和一些其他数据.待办事项列表的项目也与其他实体有关系。

我为此创建了一个 iOS 应用程序,它使用核心数据数据模型...现在我想制作一个 OS X 应用程序并同步。

我是 OS X 开发的新手,偶然发现了 NSDocument,想知道它是否可用。我只是希望用户看到类似于 excel table 的列表并且可以对其进行编辑。我发现一些例子只存储一个字符串,例如https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/ManagingLifecycle/ManagingLifecycle.html or this tutorial http://www.raywenderlich.com/12779/icloud-and-uidocument-beyond-the-basics-part-1

还有 NSPersistentDocument 来处理核心数据,我认为这是我必须尝试的。

但一般来说,将 NSDocument 用于我的待办事项列表有什么好处吗?一个可能是撤消功能,但我不确定这是否适用。有什么建议吗?

我也不确定我是否必须为每个待办事项使用一个文档,或者更确切地说,将它们全部加载到一个文档中,以及这是否适用于 table 视图...也许在待办事项应用程序中我永远不会得到数百个条目,但主要是我可以。我可以分页等吗? 谢谢!

编辑:我刚刚专门阅读 Document-based application, or not? "The key question is one of independence. If all of the objects in your application's model are related then there's no need to manage independent documents." 不确定如何将其应用到我的模型中...它是相关的。一些 1:1 和 1:n 关系。这是否意味着我所有的对象都是相关的?或者我仍然可以将它们视为 "independent" 文档...?

如果应用只有一个待办事项列表,则使用 NSDocument 没有任何好处。使用 Core Data,无需使用 NSDocument 即可获得撤消支持。

如果您的应用程序允许人们创建多个待办事项列表并将每个列表保存在自己的文件中,NSDocument 将会有所帮助。 NSDocument 专为文字处理器和电子表格等应用程序而设计,人们可以在其中创建多个文档并同时打开多个文档。如果您为此应用程序使用 NSDocument,每个待办事项列表将是其自己的文档。

更新

NSDocument 的主要优点涉及文件菜单。使用 NSDocument 时,选择“文件”>“新建”会创建一个新文档。选择“文件”>“打开”会打开一个“打开文件”对话框,供您从磁盘加载文档。保存新文档时选择“文件”>“保存”会打开“保存文件”对话框,以便您将文档另存为磁盘上的文件。

在确定是否使用 NSDocument 时,请问自己以下问题:您是否希望用户通过选择“文件”>“新建”来创建新的待办事项列表?您是否希望用户通过选择“文件”>“保存”将待办事项列表保存为单独的文件?您是否希望用户通过选择“文件”>“打开”来打开待办事项列表?如果这些问题的答案是肯定的,NSDocument 会帮助你。如果这些问题的答案是否定的,NSDocument 不会帮助你。此外,在处理引用列表中各个待办事项的 "other documents" 时,NSDocument 不会帮助您。

要回答有关 iOS 同步的问题,您是否在 iOS 应用程序中使用了 UIManagedDocument?如果是这样,您可以在 Mac 应用程序中使用 NSPersistentDocument 并共享相同的核心数据模型。否则,您将无法使用 NSPersistentDocument。您必须在 Mac 应用程序中使用 NSManagedObject 才能在 iOS 和 Mac 应用程序中使用相同的核心数据模型。不使用 NSPersistentDocument 也可以一起使用 NSDocument 和 Core Data,但我不知道如何一起使用它们。但是,如果您没有在 iOS 应用程序中使用 UIManagedDocument,则表明您不应在 Mac 应用程序中使用 NSDocument。