删除 NSManagedObject 时的附加操作

Posted

技术标签:

【中文标题】删除 NSManagedObject 时的附加操作【英文标题】:Additional actions when NSManagedObject is deleted 【发布时间】:2012-04-03 14:24:16 【问题描述】:

我有一个包含“项目”对象的核心数据“购物清单”。我将显示顺序存储为每个项目的属性。

我想在删除商品时更新购物清单中所有其他商品的显示顺序。当我在我的视图控制器中使用它时(从那里删除项目),执行此操作的代码工作正常,但由于它确实与业务对象而不是视图相关,因此最好将其放置在 ShoppingList 或 Item .

理想情况下,我希望将其合并到项目的删除中。到目前为止,我已经尝试了以下方法:

1) 自定义标准Core Data生成的ShoppingList.RemoveItemsObject(确保观察KVO before.after)。这种方式的奇怪之处在于,传递的项目在到达我的代码之前被剥离了与其他核心数据实体的关系,我需要正确处理显示订单。 2)自定义Item.didTurnIntoFault。同样适用 - 但在这个阶段甚至项目的属性都消失了。

一个答案是简单地在 ShoppingList 上定义一个新方法来执行我的处理,然后调用原始的 removeItemsObject。但我更愿意知道,无论何时从任何地方移除一个项目,这都会得到处理。例如,当我自定义 awakeFromInsert 时,这很有效 - 我知道每当创建一个项目时,都会为我设置某些东西。但我很惊讶没有删除的等价物。

【问题讨论】:

【参考方案1】:

您是否尝试实现prepareForDeletion?听起来这正是您正在寻找的。​​p>

The doc says:

您可以实现此方法以在删除对象之前执行所需的任何操作,例如在关系被拆除之前的自定义传播,或使用键值观察重新配置对象。

【讨论】:

以上是关于删除 NSManagedObject 时的附加操作的主要内容,如果未能解决你的问题,请参考以下文章

避免获取已删除的 NSManagedObject

扩展 NSManagedObject 的删除方法

segueing 时的核心数据错误:无法在 NSManagedObject 类上调用指定的初始化程序

NSManagedObject 已删除,但关系未更新

进一步解释 NSManagedObject 的删除规则 Nullify

自定义 NSManagedObject 类从 NSOrderedSet 添加/删除对象