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

时间:2013-06-03 14:12:08

标签: core-data nsmanagedobject nsmanagedobjectcontext nscoding uikit-state-preservation

我使用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 个答案:

答案 0 :(得分:2)

Core Data无法保存这些对象。但是,您可以执行的操作是将moc用于所有未保存的对象(-updatedObjects-insertedObjects-deletedObjects),然后迭代它们并将它们单独保存到磁盘。我建议将它们保存为JSON或plists等中间格式。