Как сохранить временный NSManagedObjectContext, не сохраняя его в родительском контексте
Я использую CoreData для управления моделью данных своего приложения. Я использую дочерний управляемый объектный контекст в моем редакторе представления редактирования, чтобы я мог сохранить или отменить изменения, сделанные пользователем.
Я создаю дочерний контекст следующим образом:
NSManagedObjectContext* mainMoc = <my main context>;
NSManagedObjectContext* editMoc = [[NSManagedObjectContext alloc] init];
editMoc.parentContext = mainMoc;
Если пользователь нажимает кнопку "Готово", я сохраняю изменения следующим образом:
[editMoc save:&error]
Если пользователь нажимает "отменить", я просто отбрасываю контекст editMoc.
Вот вопрос: я использую Сохранение и восстановление состояния во всем приложении и хочу сохранить контекст editMoc с изменениями для дальнейшего восстановления, когда приложение переходит в фоновый режим. Я не хочу объединять editMoc с mainMoc, потому что пользователь еще не решил, сохранять или отменять изменения.
Я попытался использовать протокол NSCoding для сериализации editMoc, но зарегистрированные объекты не сохраняются таким образом. Я также пытался изменить parentContext, но это вызывает исключение.
Я считаю, что должен быть хороший способ выполнить вышеупомянутую задачу, так как это обычная практика - использовать дочерний контекст и сохранение состояния.
Мой проект работает на iOS 6.0 и выше.
1 ответ
В Core Data нет способа сохранить эти объекты. Что вы можете сделать, однако, это попросить Мос для всех своих несохраненных объектов (-updatedObjects
, -insertedObjects
, -deletedObjects
), а затем перебрать их и сохранить их на диск по отдельности. Я бы предложил сохранить их в промежуточном формате, таком как JSON или plists.