使用内置的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的,我宁愿喜欢他们存储在本地数据库。