使用内置的CoreData选项将Blob存储在外部位置



我管理的对象具有映像属性。由于在CoreData中存储大Blob是个坏主意,我尝试使用内置的CoreData选项"存储在外部记录文件中",您可以在数据模型检查器中看到该选项。

尽管启用了此选项,但我没有看到任何图像数据存储在外部。从大小来看,它们似乎仍保存在sqlite文件中。问题出在哪里?

如果您的商店类型为NSSQLiteStoreType,则您的属性为NSBinaryDataAttributeType。您已启用setAllowsExternalBinaryDataStorage,并且对象数据大小大于约1MB。

  • 小于1MB的对象存储在sqlite数据库中
  • 较大的对象只是对外部文件的引用

您将在与持久存储相同位置的隐藏子目录中找到(外部)文件。

<path>/<database>.sqlite
<path>/<your_database>_SUPPORT/_EXTERNAL_DATA/

sqlite2不允许BLOB数据的大小超过1MB,但是sqlite3允许更大的BLOB。首先查看使用哪个版本的sqliteu。如果你的文件是MB的,我更希望它们存储在本地数据库中。

最新更新