首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSPersistentDocument创建“文档”

使用NSPersistentDocument创建“文档”
EN

Stack Overflow用户
提问于 2017-07-27 16:13:26
回答 2查看 1K关注 0票数 6

我想创建一个应用程序

  • 斯威夫特
  • CoreData
  • 在标准的macOS时尚自定义扩展中工作的“文档”,一个“文件”/filewrapper,包含与该文档相关的所有数据

这似乎是不可能的。文件中非常清楚地指出

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

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

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

有什么办法我忽略了吗?(示例非常稀少;大纳德牧场样品也解决不了这个问题;马库斯·扎拉和Objc.io都没有触及NSPersistentDocument)。

EN

回答 2

Stack Overflow用户

发布于 2017-09-09 12:24:16

按照您希望的方式使用NSPersistentDocument的唯一选项是将图像直接存储在数据库中。实体上需要一个二进制数据属性,但不能打开Allows External Storage选项。

如果打开此选项,Core Data将根据大小决定是否将图像直接存储在数据库中,还是存储在文档所在文件夹内的隐藏文件夹中:

(我在查找器中输入cmd-shift-.使文件夹可见)。示例文档名为Test 1.doof,它包含三个图像:

您可以看到隐藏文件夹.Test 1_SUPPORT/EXTERNAL DATA包含两个文件,它们是两个较大的图像(1.3MB和494 KB)。第三个只有50 KB的存储在Test 1.doof中。如果将Test 1.doof移动到另一个文件夹,则隐藏文件夹将被留下。打开另一个文件夹中的文件会导致两个图像丢失。

如果将二进制数据放入与其他数据具有一对一关系的单独实体中,则将图像存储在数据库中并不那么糟糕,如下所示:

这样,图像就不会干扰任何搜索或排序操作。NSPersistentDocument免费为您提供了许多很酷的功能,所以您应该尽可能地使用它。

两项补充意见:

  • 如果您为属性打开Allows External Storage,您不需要关心URL或存储图像的位置,核心数据为您提供了帮助(但对于基于文档的应用程序则不是一种有用的方法)。
  • 这些shmwal文件是“有时”出现的临时文件,用于没有外部存储的数据库。如果他们坚持,你可以安全地删除当你的应用程序关闭。
票数 4
EN

Stack Overflow用户

发布于 2017-08-11 17:50:10

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

另见NSDocument和CoreData是一个可能的组合,还是NSPersistentDocument是唯一的方式?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45356025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档