Хранение BLOB-объектов во внешнем местоположении с использованием встроенной опции CoreData - PullRequest
12 голосов
/ 21 марта 2012

У меня есть управляемые объекты со свойствами изображения. Поскольку хранить большие двоичные объекты в CoreData - плохая идея, я пытаюсь использовать встроенную опцию CoreData « Сохранить во внешнем файле записи », которую вы можете увидеть в Инспекторе моделей данных.

Несмотря на включение этой опции, я не вижу никаких данных изображения, сохраняемых извне. Судя по размеру, кажется, что они все еще сохраняются в файле sqlite. В чем проблема?

Ответы [ 2 ]

24 голосов
/ 28 марта 2012

Если тип вашего магазина NSSQLiteStoreType, ваш атрибут NSBinaryDataAttributeType. Вы включили setAllowsExternalBinaryDataStorage, и размер данных вашего объекта превышает примерно 1 МБ.

  • Объекты размером менее 1 МБ хранятся в базе данных sqlite.
  • Более крупные объекты - это просто ссылки на внешний файл.

Вы найдете (внешние) файлы в скрытом подкаталоге в том же месте, что и постоянное хранилище.

<path>/<database>.sqlite
<path>/<your_database>_SUPPORT/_EXTERNAL_DATA/
0 голосов
/ 21 марта 2012

sqlite2 не допускает, чтобы размер данных BLOB превышал 1 МБ, однако sqlite 3 допускает больший BLOB. Сначала проверьте, какая версия sqlite используется.И если ваш файл находится в мегабайтах, я бы предпочел хранить их в локальной базе данных.

...