使用 NSPersistentDocument 创建“文档”

gre*_*ght 5 macos core-data nspersistentdocument

我想创建一个使用

  • 迅速
  • 核心数据
  • 以标准 macOS 方式工作的“文档”[自定义扩展名,包含与该文档相关的所有数据的单个“文件”/文件包装器]

这似乎是不可能的。该文件非常清楚地说明

NSPersistentDocument 不支持某些文档行为:文件包装器。[..]

这让我认为在 CoreData 中处理图像的常用方法 -带有“允许外部存储”的二进制数据并将它们保存到不同的位置,将 URL 存储在数据库中 - 不能与 NSPersistentDocument 一起使用。我希望我的用户能够对我的“文件”执行通常的 Finder 操作(复制、移动到外部存储、从外部备份恢复)并且需要我的所有数据都在一个包中。

文件存储的 SQL 版本在保存时会产生通常的三重堆栈 - .sqlite、.sqlite-shm、.sqlite-wal - 作为“文档”是无用的。

有没有我忽略的解决方案?(示例非常稀少;Big Nerd Ranch 示例也没有解决这个问题;Marcus Zarra 和 Objc.io 都没有触及 NSPersistentDocument)。

Ely*_*Ely 1

如果您想在文档中放置更多内容,而不仅仅是数据库,那么您应该实现NSDocument而不是NSPersistentDocument. 在这种情况下,您不会获得对 CoreData 的内置支持,但您可以将文档用作多种文件类型的容器。

另请参阅NSDocument 和 CoreData 是可能的组合,还是 NSPersistentDocument 是唯一的方法?