Я разрабатываю приложение для iOS, используя Core Data. Я хочу, чтобы постоянное хранилище располагалось в общем месте, например на сетевом диске, чтобы несколько пользователей могли работать с данными (в разное время, т.е. параллелизм не является частью вопроса).
Но я также хочу предложить возможность работать с данными «в автономном режиме», то есть сохраняя локальное постоянное хранилище на iPad. До сих пор я читал, что могу сделать это в некоторой степени, используя функцию миграции координатора постоянного хранилища, но это, похоже, означает, что старое хранилище становится недействительным. Кроме того, я не обязательно хочу переместить весь магазин в «офлайн», а только его часть: используя простой пример «отдела компании», который предлагает Apple, я хочу, чтобы пользователи могли проверить один отдел, а также со всеми сотрудниками, связанными с этим отделом (и всеми атрибутами, связанными с каждым сотрудником). Затем пользователи могут работать с данными отдела локально на своем iPad и через некоторое время синхронизировать эти изменения обратно в постоянное хранилище сервера.
Итак, что мне нужно, так это скопировать основной объект данных из одного хранилища в другое вместе со всеми объектами, на которые ссылаются отношения. И этот процесс копирования должен также гарантировать, что, если объект уже существует в целевом постоянном хранилище, он будет перезаписан, а не добавлен в хранилище новый объект (я уже даю каждому объекту UID по другой причине, поэтому я мог бы быть в состоянии для повторного использования UID).
Из всего, что я видел до сих пор, похоже, что нет простого способа синхронизировать или копировать постоянные хранилища Core Data, это справедливая оценка?
Так что мне действительно нужно написать кусок кода, который делает следующее:
- получить объект «А» через MOC
- получить все объекты во всех сущностях, которые имеют отношение к объекту "A"
- создать экземпляр нового MOC для целевого постоянного хранилища
- для каждого полученного объекта проверьте целевое хранилище, существует ли объект
- если объект существует, перезапишите его атрибутами из объекта, полученного на шагах 1 и 2.
- если объект не существует, создайте его и установите все атрибуты в соответствии с объектом, полученным на шагах 1 и 2.
Хотя это не самая сложная вещь в мире, я бы все же подумал, что это требование для «онлайн / оффлайн редактирования» достаточно распространено, чтобы некоторые стандартные функции были доступны для синхронизации частей постоянных хранилищ?
Ваша точка зрения очень ценна, спасибо, da_h-man