首页 > 解决方案 > 是否可以在基于文档的应用程序中使用 Core Data?

问题描述

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

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

这是我可以期待的行为吗?

重新制定:我想知道我是否可以通过 a 读取/写入文件UIDocumentBrowserViewController,其中的数据由 a 描述UIManagedDocument,适用于 Core Data。

先感谢您。

标签: iosswiftcore-datansfilemanageruidocument

解决方案


正如您所发现的,UIManagedDocument适合您的应用程序。它确实具有在文档包中写入读取 附加内容(例如您拥有的元数据或图像文件)的方法。

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

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

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


推荐阅读