Как сохранить временный 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.