NSDocument 用于关系数据/待办事项列表?
Posted
技术标签:
【中文标题】NSDocument 用于关系数据/待办事项列表?【英文标题】:NSDocument for relational data / todo list? 【发布时间】:2015-01-10 23:16:51 【问题描述】:我想创建一个 OS X 应用程序,用户可以在其中编辑类似于待办事项列表的项目 - 每个项目都有文本、状态(完成/待办事项)、创建日期和一些其他数据。待办事项列表的项目也与其他实体有关系。
我为此创建了一个 ios 应用程序,它使用核心数据数据模型......现在我想制作一个 OS X 应用程序并进行同步。
我是 OS X 开发的新手,偶然发现了 NSDocument,想知道这是否可用。我只希望用户看到类似于 excel 表的列表并可以对其进行编辑。我找到了一些示例来仅存储一个字符串,例如https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/ManagingLifecycle/ManagingLifecycle.html 或本教程http://www.raywenderlich.com/12779/icloud-and-uidocument-beyond-the-basics-part-1
还有 NSPersistentDocument 可以处理核心数据,我认为这是我必须尝试的。
但一般来说,将 NSDocument 用于我的待办事项列表有什么好处吗?一个可能是撤消功能,但我不确定这是否适用。有什么建议吗?
我也不确定我是否必须为每个待办事项使用一个文档,或者将它们全部加载到一个文档中,如果这适用于表格视图......也许在待办事项应用程序中我永远不会得到数百个条目,但主要是我可以。我可以分页等吗? 谢谢!
编辑:我刚刚读了Document-based application, or not? 专门“关键问题之一是独立性。如果您的应用程序模型中的所有对象都是相关的,那么就不需要管理独立的文档。”不知道如何将其应用于我的模型......它是相关的。一些 1:1 和 1:n 的关系。这是否意味着我所有的对象都是相关的?还是我仍然可以将它们视为“独立”文档...?
【问题讨论】:
【参考方案1】:如果应用程序只有一个待办事项列表,则使用 NSDocument 没有任何好处。使用 Core Data,您将获得撤消支持,而无需使用 NSDocument。
如果您的应用允许人们创建多个待办事项列表并将每个列表保存在自己的文件中,那么 NSDocument 会有所帮助。 NSDocument 专为文字处理器和电子表格等应用程序而设计,人们可以在其中创建多个文档并同时打开多个文档。如果你为这个应用程序使用 NSDocument,每个待办事项列表都是它自己的文档。
更新
NSDocument 的主要优势在于文件菜单。当您使用 NSDocument 时,选择 File > New 创建一个新文档。选择“文件”>“打开”会打开一个“打开文件”对话框,供您从磁盘加载文档。保存新文档时选择“文件”>“保存”会打开“保存文件”对话框,供您将文档另存为磁盘上的文件。
在决定是否使用 NSDocument 时,问自己以下问题:您是否希望用户通过选择 File > New 来创建新的待办事项列表?您是否希望用户通过选择“文件”>“保存”将待办事项列表保存为单独的文件?您是否希望用户通过选择“文件”>“打开”来打开待办事项列表?如果这些问题的答案是肯定的,NSDocument 会帮助你。如果这些问题的答案是否定的,NSDocument 不会帮助你。此外,在处理引用列表中各个待办事项的“其他文档”时,NSDocument 不会帮助您。
要回答有关 iOS 同步的问题,您是否在 iOS 应用程序中使用 UIManagedDocument?如果是这样,您可以在 Mac 应用程序中使用 NSPersistentDocument 并共享相同的 Core Data 模型。否则,您将无法使用 NSPersistentDocument。您必须在 Mac 应用程序中使用 NSManagedObject 才能在 iOS 和 Mac 应用程序中使用相同的 Core Data 模型。可以在不使用 NSPersistentDocument 的情况下一起使用 NSDocument 和 Core Data,但我不知道如何一起使用它们。但是如果你没有在你的 iOS 应用中使用 UIManagedDocument,那就表明你不应该在你的 Mac 应用中使用 NSDocument。
【讨论】:
我有多个待办事项列表。还有一些其他“文档”引用了这些列表中出现的各个待办事项。我希望用户能够像电子表格一样编辑每个列表是的。问题是,我需要使用核心数据存储所有内容,因为我想与 iOS 应用程序同步,该应用程序只使用核心数据而不是文档,并且想要使用完全相同的(核心)数据模型。仍然使用文档有益吗?据我了解,可以将核心数据用作存储,因此至少是可能的。 这是很多有用的信息,谢谢 (+1)!听起来我不需要那个,因为我不想向用户明确说明我的列表是“文档”(打开/保存等)。认为它可能是一个内部概念,对用户来说是不可见的。另外,我没有添加任何与iOS应用程序相关的文档,因为我当时并不了解它......如果方便的话我可能会添加它。但是,我仍然读到,即使不使用文档功能,UIManagedDocument 也可以方便地管理核心数据堆栈,并且还有助于 iCloud,以防我将来支持它...... 好吧,我刚刚在另一篇文章中读到,使用 UIManagedDocument 作为核心数据堆栈的助手已经过时,因为 xCode 带有核心数据模板。也许它在这方面没有提供额外的价值。自动保存可能很好,但我不知道它是否值得,每次操作后保存都很容易实现并且更可控......而且iCloud似乎也只适用于核心数据。我现在只关注核心数据。以上是关于NSDocument 用于关系数据/待办事项列表?的主要内容,如果未能解决你的问题,请参考以下文章
当我将 OnResume 函数用于带有数据库的简单待办事项列表应用程序时,OnCreate 函数被删除