删除 NSManagedObject 子类不会取消它的多对多关系
Posted
技术标签:
【中文标题】删除 NSManagedObject 子类不会取消它的多对多关系【英文标题】:Deleting NSManagedObject subclass not nullifying it's many-to-many relationship 【发布时间】:2014-11-18 15:55:06 【问题描述】:我在 Swift 中使用 CoreData,我有两个实体。我们称他们为Item
和Tag
。它们设置为基本的多对多(两者都有可选的项目/标签,无效,对多)关系,看起来类似于:
class Item: NSManagedObject
// Rest of attributes
@NSManaged var tags: NSSet
设置关系可以正常工作,但是当我尝试删除项目时:
managedObjectContext.performBlockAndWait
managedObjectContext.deleteObject(item)
managedObjectContext.save(/** it saves with no error */)
它删除了项目对象,但它的任何标签都没有被更新,如果我在其他地方获取它们,它仍然有项目中的项目,但显然不会出错。 (并且 Z2TAGS 表仍然显示被删除的项目 id)。
我尝试在删除之前自己手动更新关系,但这并没有改变我在更新关系然后删除对象后必须保存的任何内容。
虽然我确定出了点问题,但 CoreData 肯定不应该在基本的多对多和正确的逆设置的情况下进入这种状态?是 Swift 的问题吗?我错过了什么?
【问题讨论】:
【参考方案1】:在核心数据中,除了关系类型(一对一、多对多等),还可以设置删除规则。比如如果有这样的关系
A --->B(一对一)
B --->> A(一对多)
您可以设置删除规则,即删除 A 时 B 的实例会发生什么。
这篇on ***的帖子详细讨论了删除规则。
【讨论】:
虽然这两种关系都是“无效”,所以在删除项目的情况下,它应该从标签的项目关系中删除该项目吗?以上是关于删除 NSManagedObject 子类不会取消它的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
当一对多相关的 NSManagedObject 子类发生更改时,如何更新 NSManagedObject 子类?
在 Core Data 中获取和更新,或者创建和删除 NSManagedObject?