使用内置的CoreData选项在外部位置存储Blob
我pipe理的对象具有图像属性。 由于在CoreData中存储大块是一个坏主意,我试图使用内置的CoreData选项“ 存储在外部logging文件 ”,您可以在数据模型检查器中看到。
尽pipe启用此选项,我没有看到任何图像数据被存储在外部。 从大小来看,似乎他们仍然被保存在sqlite文件中。 有什么问题?
如果您的商店types是NSSQLiteStoreType
,那么您的属性是NSBinaryDataAttributeType
。 您已经启用了setAllowsExternalBinaryDataStorage
并且您的对象数据大小大于1MB。
- 小于1MB的对象存储在sqlite数据库中。
- 较大的对象只是对外部文件的引用。
您将在隐藏的子目录中find(外部)文件与持久存储相同的位置。
<path>/<database>.sqlite <path>/<your_database>_SUPPORT/_EXTERNAL_DATA/
sqlite2不允许BLOB数据的大小超过1MB,但sqlite 3允许更大的BLOB。首先检查你使用的是哪个版本的sqlite。 而如果你的文件是在MB的,我宁愿喜欢他们存储在本地数据库。