我正在使用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对象,但它没有更新任何标签,如果我在别处获取它们仍然有项目中的项目,但显然不会出错。 (并且Z2TAGS表仍显示已删除的项ID)。
我尝试在删除之前自己手动更新关系,但这不会改变我在更新关系后删除对象后必须保存的内容。
我确信有些事情会出错,当然CoreData不应该在这个状态下设置基本的多对多设置正确的反转吗?是Swift的东西吗?我缺少的东西?
答案 0 :(得分:0)
在核心数据中,除了关系类型(一对一,多对多等)之外,您还可以设置删除规则。例如,如果存在这样的关系
A ---> B(一对一)
B --->> A(一对多)
您可以设置删除规则,即删除A时B的实例会发生什么。
这篇文章on Stackoverflow详细讨论了删除规则。