Macos 使用NSPersistentDocument创建';文件';
我想创建一个使用Macos 使用NSPersistentDocument创建';文件';,macos,core-data,nspersistentdocument,Macos,Core Data,Nspersistentdocument,我想创建一个使用 迅捷的 核心数据 以标准macOS方式工作的“文档”[自定义扩展名,单个“文件”/filewrapper,包含与该文档相关的所有数据] 这似乎是不可能的。文件非常清楚地表明: NSPersistentDocument不支持某些文档行为: 文件包装器。[……] 这让我认为,处理CoreData中图像的常用方法—使用“允许外部存储”的二进制数据并将其保存到不同位置,将URL存储在数据库中—不能与NSPersistentDocument一起使用。我希望我的用户能够对我的“文件”执
- 迅捷的
- 核心数据
- 以标准macOS方式工作的“文档”[自定义扩展名,单个“文件”/filewrapper,包含与该文档相关的所有数据]
有没有我忽略的解决方案?(示例非常稀少;也不能解决这个问题;Marcus Zarra和Objc.io都没有涉及到NSPersistentDocument) 如果您想在文档中放置更多而不仅仅是一个数据库,那么您应该实现
NSDocument
,而不是NSPersistentDocument
。在这种情况下,您无法获得对CoreData的内置支持,但可以将文档用作多种文件类型的容器
另请参见唯一可以使用
NSPersistentDocument
的选项,即直接将图像存储在数据库中。实体上需要一个二进制数据属性,但不能启用允许外部存储
选项
如果启用此选项,Core Data将根据大小决定是将图像直接存储在数据库中,还是存储在文档所在文件夹内的隐藏文件夹中:
(我在Finder中输入cmd shift-.
使文件夹可见)。示例文档名为test1.doof
,它包含三个图像:
您可以看到隐藏文件夹.Test 1u SUPPORT/EXTERNAL DATA
包含两个文件,这两个文件是两个较大的图像(1.3MB和494KB)。只有50KB的第三个存储在test1.doof
中。如果将Test 1.doof
移动到另一个文件夹中,则隐藏的文件夹将被保留。打开另一个文件夹中的文件会导致丢失两个图像
如果将二进制数据放入与其余数据具有一对一关系的单独实体中,则将图像存储在数据库中并不是那么糟糕,如下所示:
这样图像就不会干扰任何搜索或排序操作NSPersistentDocument
免费为您提供了很多很酷的功能,因此您应该尽可能使用它
补充两点:
- 如果启用属性的
,则不必关心URL或图像的存储位置,核心数据可以为您做到这一点(但对于基于文档的应用程序来说,这不是一种有用的方式)允许外部存储
- 这些
或shm
文件是“有时”出现的临时文件,用于没有外部存储的数据库。如果它们粘住了,你可以在应用程序关闭时安全地移除它们wal