【问题标题】:CoreData save some changes from child Managed Object Context?CoreData 保存子托管对象上下文的一些更改?
【发布时间】:2021-11-14 03:58:01
【问题描述】:

我想创建临时托管对象并有条件地保存/丢弃它们。

共识似乎是我应该创建一个子托管对象上下文并有条件地保存/丢弃它。

在这种情况下,我如何持久化其中一个临时实体并丢弃其余实体?

【问题讨论】:

  • 保存子上下文时,其中的所有对象都将持久保存到其父上下文。子托管上下文并不能真正帮助您保存一个实体并丢弃其余实体。您仍然需要删除不想保存的那些。它比使用主托管对象上下文更干净,因为它至少本地化了添加/删除效果。您无需担心某些其他代码可能会保存上下文,从而过早地提交您的更改。根据您要执行的操作,也许您可​​以创建许多子上下文,每个上下文都有一个对象并保存您想要保留的子上下文。
  • @Paulw11 我确实考虑过为每个元素创建一个上下文。我可能有几千个临时元素。那么这种方法可行吗?
  • 您是说您可能有一千个临时对象,但您可能只想保存其中的几个?
  • 如果您的模型不是那么复杂(许多关系),我会考虑为您向用户显示的对象使用结构,然后仅从所选项目创建托管对象。既然您写的是您正在下载项目,那么您可能已经有一个合适的结构。
  • 最好使用结构然后 IMO

标签: ios swift core-data


【解决方案1】:

临时的NSManagedObject 实例不需要与上下文相关联。

在您的情况下,创建没有上下文的实例。在创建时将nil 传递给实例而不是子上下文。

当您准备好保存其中一个对象时,给它一个上下文并在该上下文上调用 save。

阅读上面的 cmets,如果要保存的丢弃率很高,则结构可以工作。如果情况相反(主要是保存),那么我会加载到 MO 并丢弃。内存和性能将成为您的驱动力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多