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

时间:2014-11-18 15:55:07

标签: ios core-data swift

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

class Item: NSManagedObject {
  // Rest of attributes
  @NSManaged var tags: NSSet
}

设置关系正常,但是当我尝试删除项目时:

managedObjectContext.performBlockAndWait {
  managedObjectContext.deleteObject(item)
  managedObjectContext.save(/** it saves with no error */) 
}

它删除了item对象,但它没有更新任何标签,如果我在别处获取它们仍然有项目中的项目,但显然不会出错。 (并且Z2TAGS表仍显示已删除的项ID)。

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

我确信有些事情会出错,当然CoreData不应该在这个状态下设置基本的多对多设置正确的反转吗?是Swift的东西吗?我缺少的东西?

1 个答案:

答案 0 :(得分:0)

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

A ---> B(一对一)

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

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

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