如何保存临时NSManagedObjectContext而不将其保存到父上下文

问题描述:

我使用CoreData来管理我的应用程序数据模型。我在编辑视图控制器中使用子管理的对象上下文,以便我们可以保存或放弃用户所做的更改。如何保存临时NSManagedObjectContext而不将其保存到父上下文

我创建子上下文如下:

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及以上版本。

Core Data内部没有办法保存这些对象。但是,您可以执行的操作是向所有未保存的对象(-updatedObjects,-insertedObjects,-deletedObjects)请求moc,然后遍历它们并将它们单独保存到磁盘。我建议将它们保存为JSON或plists等中间格式。