我是否可以指定应删除从核心数据关系中删除的对象?

时间:2011-10-19 11:49:41

标签: objective-c core-data

我们在一对多关系中有一个Listing实体和一个ListingAddress实体。如果没有列表,则不应存在ListingAddress。我希望从上下文的地址关系中删除的任何ListingAddress都要从上下文中删除。这是可能的,还是我必须手工完成?

3 个答案:

答案 0 :(得分:3)

你必须手工完成。

如果列表被删除,那就很简单了。请参阅Relationship Delete Rules。您可以将其设置为“级联”,从而自动删除相关对象。您当然还需要save对上下文所做的任何更改:

  

级联

     

删除关系目的地的对象。   例如,如果删除部门,则同时解雇该部门中的所有员工。

但在您的情况下,如果未删除列表,则必须手动清除您的孤立的ListingAddress对象。以下是一些涉及该问题的帖子:

Deletions in a many-to-many structure

Core Data: re-setting to-many relationship

答案 1 :(得分:2)

当您从关系中删除实体时,没有自动删除实体的方法,但您可以执行相反的操作。删除实体时,可以从关系中删除实体。在ListingAddress实体上使用Nullify删除规则。它仍然只需要一行代码。您编写删除代码,而不是删除代码。除非这是一个多对多的关系,否则这应该适合你的目的。

答案 2 :(得分:0)

你可以检查一下willSave方法,如果有任何listAddress的孤儿,如果有的话,可以设置为删除

override func willSave() {
    super.willSave()

    if self.deleted {
      return
    }

    if self.listingInverseRelationship == nil {
      self.managedObjectContext?.deleteObject(self)
    }
  }