Сохранение капли во внешнем местоположении с использованием встроенного параметра CoreData
У меня есть объекты, обладающие свойствами изображения. Поскольку сохранение больших блоков в CoreData является плохой идеей, я пытаюсь использовать встроенный параметр CoreData " Сохранить в файле внешней записи", который вы можете увидеть в Data Model Inspector.
Несмотря на включение этой опции, я не вижу, чтобы какие-либо данные изображения хранились извне. Судя по размеру, похоже, что они все еще сохраняются в файле sqlite. В чем проблема?
Ответы
Ответ 1
Если ваш тип магазина NSSQLiteStoreType
, ваш атрибут NSBinaryDataAttributeType
. Вы включили setAllowsExternalBinaryDataStorage
, а размер данных объекта больше, чем приблизительно 1 МБ.
- Объекты, размер которых меньше 1 МБ, хранятся в базе данных sqlite.
- Объекты, которые больше, являются лишь ссылкой на внешний файл.
Вы найдете (внешние) файлы в скрытом подкаталоге в том же месте, что и постоянное хранилище.
<path>/<database>.sqlite
<path>/<your_database>_SUPPORT/_EXTERNAL_DATA/
Ответ 2
sqlite2 не позволяет размеру данных BLOB быть более 1 МБ. Однако sqlite 3 позволяет увеличить BLOB. Сначала проверьте, какая версия sqlite используется.
И если ур файл находится в МБ, я предпочел бы вместо этого хранить их в локальной базе данных.