使用内置CoreData选项在外部位置存储blob

时间:2012-03-21 09:41:02

标签: ios core-data blob

我有托管具有图像属性的对象。由于在CoreData中存储大blob是一个坏主意,我正在尝试使用内置的CoreData选项“存储在外部记录文件”,您可以在数据模型检查器中看到它。

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

2 个答案:

答案 0 :(得分:24)

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

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

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

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

答案 1 :(得分:0)

sqlite2不允许BLOB数据的大小超过1MB,但是sqlite 3允许更大的BLOB.First检查使用哪个版本的sqlite。 如果你的文件是MB,我宁愿更喜欢将它们存储在本地数据库中。