删除 NSManagedObject 子类不会使其多对多关系无效



我正在将 CoreData 与 Swift 一起使用,我有两个实体。让我们称它们为ItemTag.它们设置了基本的多对多(两者都具有可选的项目/标签、nullify、对多)关系,看起来类似于:

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 不应该在设置正确的逆运算的基本多对多的情况下进入这种状态吗?是斯威夫特的事情吗?我错过了什么?

在核心数据中,除了关系类型(一对一、多对多等)外,还可以设置删除规则。例如,如果存在这样的关系

A --->B(一对一)

B --->> A(一对多)

您可以设置删除规则,即删除 A 时 B 的实例会发生什么。

这篇关于Stackoverflow的文章详细讨论了删除规则。

最新更新