Мое приложение синхронизирует и резервирует свои данные через iCloud (для этого я использую iCloudCoreDataStack). Поскольку мое приложение обрабатывает важные данные, созданные пользователем, я хочу предложить дополнительную защиту от возможности создавать моментальные снимки время от времени, которые могут быть восстановлены позже.Снимки данных в приложении Core Data, поддерживаемом iCloud?
Я не говорю об отмене одного или двух отдельных изменений, но о реальных моментальных снимках, timestamped и сохраненных в порядке сохранения.
Поскольку я использую синхронизацию iCloud, я не могу просто обменять хранилище sqlite, используемое в приложении. Я думаю, что мне нужно удалить каждый объект в текущем контексте, создать объекты, восстановленные из моментального снимка, и сохранить контекст. Затем устройство также будет изменять изменения в iCloud.
Я имею в виду следующий сценарий: нормальный
- Приложение работает без опции для создания моментальных снимков (это просто дополнительная функция безопасности для пользователя).
- Если пользователь отказывается создавать моментальные снимки время от времени, он просит ввести свои учетные данные для входа в Dropbox (уже реализовано).
- Время от времени мое приложение создает фоновый поток, в котором будет установлено второе хранилище и второй MOC (и второй PSC?). Каждый объект вместе со своими отношениями копируется в этот второй MOC. Второй MOC будет сохранен, постоянный магазин будет скопирован в Dropbox, и поток завершится.
- Если пользователь хочет восстановить снимок и отбросить все изменения, сделанные после создания снимка, мое приложение будет восстановить данные, делая обратно то, что описано в пункте 3.
Любые мысли о том, что? Сохраняется ли это, есть ли какие-либо оговорки, о которых можно подумать (например, вместе с iCloud)? Кто-нибудь сделал это еще подобным образом?
Edit:
Я был успешным в создании копии магазина с шагами, описанными выше. Отдых в магазине, похоже, также работал в некоторых первых попытках. Но я все еще беспокоюсь о способе загрузки файла хранилища (вытащил старый файл и заменил его на сохраненный).
Однако я столкнулся Яблоки «Сохранить как ...» или метод «Смена места жительства»
NSDictionary *options = @{
NSPersistentStoreRemoveUbiquitousMetadataOption: @YES
};
NSPersistentStore *copy = [psc migratePersistentStore:currentiCloudStore
toURL:url
options:options
withType:NSSQLiteStoreType
error:&error];
, который удалит все ICloud соответствующие метаданные, а также удаляет текущий магазин из координатор (я этого не хочу) и добавляет вновь созданный магазин в PSC (я тоже этого не хочу).
Что может быть лучше? Мой нынешний подход или Яблоки, встроенные в "Сохранить как .../Переместить"? Мое внимание сосредоточено на загрузке снимков позже, независимо от того, был ли включен iCloud или нет.
Спасибо, я был в состоянии сделать это. Любые мысли по моему правлению относительно сборки Apple в методе «Переместить»? – Norbert