我使用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及更高版本上运行。
答案 0 :(得分:2)
Core Data无法保存这些对象。但是,您可以执行的操作是将moc用于所有未保存的对象(-updatedObjects
,-insertedObjects
,-deletedObjects
),然后迭代它们并将它们单独保存到磁盘。我建议将它们保存为JSON或plists等中间格式。