【问题标题】:Is it possible to use Core Data in a document-based application?是否可以在基于文档的应用程序中使用 Core Data?
【发布时间】:2019-04-03 10:01:38
【问题描述】:

我正在开发一个需要将数据保存到文件中的 iOS 应用。我选择了基于文档的应用程序,确切地说是基于UIDocumentBrowserViewController 的应用程序,这样我就可以轻松地从系统的文件应用程序保存和加载文件。

由于我需要在文件上保存/加载的数据非常复杂:不同对象的大层次结构,包括元数据、图像文件等。我想知道未来使用的最佳技术是什么。 我遇到了NSFileWrapper,它能够将不同的文件保存为一个。我绝对可以使用它。但我也看到了UIManagedDocument 以及在我的项目中使用 Core Data 的能力,同时可能保存了 Core Data 数据库的内容(我知道它不完全是一个数据库,但你知道我的意思)放入我可以在 File App 中某处写入的文件中。

这是我可以预料到的行为吗?

重新表述:我想知道我是否可以通过 UIDocumentBrowserViewController 读取/写入文件,并使用与 Core Data 一起使用的 UIManagedDocument 描述的数据。

提前谢谢你。 ????

【问题讨论】:

  • 这是一个宽泛的问题。 UIManagedDocument 已经自己使用 coredata,而且由于它们是 UIDocuments,所以可以通过 UIDocumentBrowserViewController 访问它们...
  • 这周我一直在玩这个课程。我的发现是它有效并且会做你想做的事。然而,这两种技术之间的界限在哪里并不容易看出。例如,直接保存文档的上下文将发布NSManagedObjectContextDidSave 通知,但这不会保存文档,而是将其标记为hasChanges 以供下一次保存。文档保存后,您将收到文档状态更改的通知以及另一个 contextDidSave 通知。这可能会导致不必要的重绘。需要的话私信我。

标签: ios swift core-data nsfilemanager uidocument


【解决方案1】:

正如您所发现的,UIManagedDocument 可以满足您的应用需求。它还提供writeread 附加内容的方法,例如文档包中的元数据或图像文件。

话虽如此,我从未使用过 UIManagedDocument,也从未见过其他人使用它。快速搜索 GitHub 发现只有这个 one project 有两个贡献者,他们在 2013 年围绕它编写了一个包装器。此外,似乎没有来自 Apple 的任何示例代码,并且 writeAdditionalContent(_:to:originalContentsURL:) 文档中的注释 iCloud 不支持其他内容让我有点担心,但也许这是一个好迹象,表明 Core Data 团队知道在哪里划清界限。

我使用了 UIManagedDocument 的 macOS 对应物 NSPersistentDocument。它处于类似的情况,没有被大量使用,但存在更多已知的技术问题。所以几年前我切换到BSManagedDocument,据称它模仿 UIManagedDocument 以支持 Core Data 的所有现代荣耀。我对 BSManagedDocument 很满意。

总而言之,如果我遇到您的情况,是的,我会尝试 UIManagedDocument。但是,如果您在开发过程中需要使用一个或两个 DTS support incident,请不要感到惊讶。

【讨论】:

  • 非常感谢!是的,感觉就像是五年前技术的先驱。但我很高兴看到它可能是可行的。我目前正在学习 Core Data,并将尝试在一个小项目中将它与 UIManagedDocument 一起使用。我认为它可以工作,我们拭目以待!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多