删除时如何手动管理Core Data关系

Posted

技术标签:

【中文标题】删除时如何手动管理Core Data关系【英文标题】:How to manually manage Core Data relationships when deleting 【发布时间】:2009-08-13 08:54:29 【问题描述】:

我有一个核心数据实体,其中包含与另一个实体的关系。在某些情况下,我需要删除关系中的托管对象,而其他时候不需要采取任何措施。

由于这种手动管理,我对实体的删除规则是无操作。

我的问题是,执行这些规则的最佳地点在哪里?我看不到任何合适的消息可以覆盖 NSManagedObject(可能会通知对象它已被删除并应该清除其关系的东西)。

我宁愿不在应用程序逻辑的更高层执行它,因为实体对象可以从数组控制器和应用程序的不同点删除,因此有必要在所有这些级别填充关系更新代码。

【问题讨论】:

【参考方案1】:

在您的 NSManagedObject 子类中,重写 -prepareForDeletion 方法并处理那里的逻辑。

更新

您没有指定需要针对已停用版本的解决方案。在这种情况下,您可以在 -save: 调用中处理它。就在保存之前,获取要删除的对象数组,遍历它们,然后调用 -prepareForDeletionon each object if it responds to it (using-respondsToSelector:`),这为您提供了一种处理删除的未来证明方法。在运行此代码之前,您当然需要检查您是否运行的是 10.6 或更早的操作系统,但编写起来相当简单。

【讨论】:

-prepareForDeletion 仅 10.6

以上是关于删除时如何手动管理Core Data关系的主要内容,如果未能解决你的问题,请参考以下文章

从 Core Data 管理的表视图中删除对象时出错

如何在 Swift 中从 Core Data 中删除数据时删除 UITableView 行?

在 Core Data 中创建关系以执行删除

Core Data,我如何有效地查找和删除托管对象

核心数据:如何删除关系中的实体

Core Data 中的 DENY 删除规则何时真正拒绝删除对象?