【问题标题】:Deleting NSManagedObject subclass not nullifying it's many-to-many relationship删除 NSManagedObject 子类不会取消它的多对多关系
【发布时间】:2014-11-18 15:55:06
【问题描述】:

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

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 的问题吗?我错过了什么?

【问题讨论】:

    标签: ios core-data swift


    【解决方案1】:

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

    A --->B(一对一)

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

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

    这篇on Stackoverflow的帖子详细讨论了删除规则。

    【讨论】:

    • 虽然这两种关系都是“无效”,所以在删除项目的情况下,它应该从标签的项目关系中删除该项目吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多