Моя модель CoreData имеет объект с атрибутом Image. Я всегда управлял изображениями для этих объектов, сохраняя их в файловой системе и просто поддерживая ссылку на файл в атрибуте CoreData, то есть путь.

Однако недавно я перешел на использование дочерних управляемых контекстов для обработки редактирования (так что я могу легко отменить изменения, если пользователь решит отменить редактирование). Это все хорошо, но теперь у меня есть проблема с отслеживанием любых изменений изображений, особенно если пользователь изменяет изображение, я больше не могу просто удалить старый файл (не хочу, чтобы в файловой системе скопились потерянные файлы) и заменить это с новым, потому что, если пользователь отменяет изменения, старый файл теперь теряется.

На мой взгляд, у меня есть два варианта:

  1. Я отслеживаю изменения изображений на своем бизнес-уровне и удаляю любые старые изображения только после сохранения контекста или, наоборот, удаляю любые новые изображения, если контекст отбрасывается / отменяется.
  2. Я меняю свой атрибут изображения на тип двоичных данных (проверяю «разрешено внешнее хранилище») и позволяю CoreData управлять данными ... в этом случае все должно работать.

Ищете какие-либо рекомендации относительно того, какой подход лучше и, что немаловажно, эффективнее? Или любые другие альтернативные решения / варианты ...

Благодарность!

0
Paul Popiel 24 Ноя 2017 в 06:39

1 ответ

Лучший ответ

Первый подход был бы лучше. Если спасбросок можно сбросить, имеет смысл сделать именно так. И если изображения обычно маленькие, обычно лучше держать их внешними.

Хорошее место для удаления старых изображений, вероятно, находится в методе управляемого объекта willSave(). Посмотрите на changedValues, чтобы найти старое имя изображения. Если оно отличается от текущего значения, удалите старое.

Чтобы справиться с откатом изменений, на ум приходит несколько возможностей.

  • Обработайте это в любом коде, который откатывает изменение, просмотрев новый экземпляр, который должен быть откат, и удалив его файл изображения.
  • Всегда помещайте новые изображения в NSTemporaryDirectory() и используйте willSave(), чтобы переместить их в постоянное место при сохранении изменений. Тогда вам не нужно ничего делать при откате - вы можете позволить iOS очистить временный каталог за вас.
1
Tom Harrington 25 Ноя 2017 в 19:51