Ios 删除NSManagedObject子类而不使其无效';这是一种多对多的关系

Ios 删除NSManagedObject子类而不使其无效';这是一种多对多的关系,ios,core-data,swift,Ios,Core Data,Swift,我将CoreData用于Swift,我有两个实体。让我们称它们为Item和Tag。它们设置了基本的多对多(都有可选的项目/标记,为空,为多)关系,看起来类似于: class Item: NSManagedObject { // Rest of attributes @NSManaged var tags: NSSet } 设置关系很好,但是当我尝试删除项目时: managedObjectContext.performBlockAndWait { managedObjectConte

我将CoreData用于Swift,我有两个实体。让我们称它们为
Item
Tag
。它们设置了基本的多对多(都有可选的项目/标记,为空,为多)关系,看起来类似于:

class Item: NSManagedObject {
  // Rest of attributes
  @NSManaged var tags: NSSet
}
设置关系很好,但是当我尝试删除项目时:

managedObjectContext.performBlockAndWait {
  managedObjectContext.deleteObject(item)
  managedObjectContext.save(/** it saves with no error */) 
}
它删除了item对象,但它拥有的任何标记都没有被更新,如果我在别处获取它们,它仍然拥有item中的item,但显然将失败。(Z2TAGS表仍然显示已删除的项目id)

我尝试在删除之前手动更新关系,但这不会改变在更新关系然后删除对象之后必须保存的任何内容


我确信有些地方出了问题,当然CoreData不应该在这种状态下使用基本的多对多,并设置了正确的反转?是和斯威夫特有关吗?我缺少什么?

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

A--->B(一对一)

B-->A(一对多)

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

这篇文章详细讨论了删除规则。

但是这两个关系都是“无效”的,所以在删除项目的情况下,它应该从标记的项目关系中删除该项目?