【问题标题】:iPhone Core Data - How to save an entity's new value?iPhone Core Data - 如何保存实体的新值?
【发布时间】:2011-03-31 10:02:29
【问题描述】:

我有一个实体,比如人,它有一个属性名称。

我通过 Context 创建它并获得一个 Person 的实例。现在我给

person.name = @"杰克";

那么如何在持久存储中更新它?您可能会说使用 [Context save],但如果我调用该方法,上下文是否会保存从它出来的所有内容?

例如,如果我这样做

person1.name = @"Jack1"; person2.name = @"Jack2";

我只想更新 person1.name,而不是 person2.name,我该怎么做?

谢谢

【问题讨论】:

  • 如果您不想保存person2.name 的值,为什么要更改它?请记住,您在这里谈论的是对象图,即您正在更改其属性的内存中对象的集合。皮层必须保存整个图形,因为这是保持图形完整性的唯一方法。您可能想查看撤消功能。

标签: iphone core-data


【解决方案1】:

为什么不为 person.name Jack .... 设置值后立即保存上下文? & 继续与 Jack2 合作

【讨论】:

  • 如果此人退出应用,App Delegate 中可能已经有一个 [context save]。我同意 Asad。
  • 感谢您的回答。我的观点之一是关于性能。如果我调用 [context save],它会扫描所有关联的对象并将它们全部保存吗?当我只想保存一个 obj 时,我想这是低性能,对吧?另外,您的意思是,每次我只想保存一个obj时,我都会给出一个“保存”?谢谢
【解决方案2】:

您无法选择保存哪些对象,哪些不保存。托管对象上下文中已修改的对象将在您保存上下文时更新,而保存上下文是保存对该上下文中对象所做更改的唯一方法。

如果您想使用 person2 但可能不想提交您所做的任何更改,您可以创建一个单独的托管对象上下文。如果 person2 是一个新对象,因此没有连接到存储中的任何其他对象,这很有效,但如果 person2 可能已经存在于第一个上下文中,它可能会变得有点复杂。 Core Data 本身不会同步上下文之间的更改:阅读Communicating Changes Between Contexts 了解有关如何处理此问题的更多信息。

【讨论】:

  • 我将此答案标记为唯一,因为我认为 caleb 提供了更多信息。阿萨德,你也是对的,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
相关资源
最近更新 更多