2

我使用 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 及更高版本上运行。

4

1 回答 1

2

Core Data 内部无法保存这些对象。但是,您可以做的是向 moc 询问其所有未保存的对象(-updatedObjects, -insertedObjects, -deletedObjects),然后遍历它们并将它们单独保存到磁盘。我建议将它们保存为 JSON 或 plist 等中间格式。

于 2013-06-03T15:30:37.343 回答