【问题标题】:How to persist temporary NSManagedObjectContext without saving it to the parent context如何在不将其保存到父上下文的情况下持久保存临时 NSManagedObjectContext
【发布时间】:2023-03-21 17:10:01
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-08
      • 2015-11-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      相关资源
      最近更新 更多