核心数据:从关系中删除时删除目标对象的多对多关系

时间:2013-08-17 16:32:05

标签: ios objective-c core-data

图片我有2个核心数据实体,即EntityA和EntityB。

EntityA有许多EntityB,而EntityB属于一个EntityA,即:

EntityA ----- (entities) ->> EntityB
EntityB ----- (entity) ----> EntityA

现在图片我有一个EntityA *entityA已经有一些entities

现在我执行以下操作:

entityA.entities = @[/* some new entityB's */];

现在,“旧”实体B将entity nil,因此“悬空”。我想删除这些entityB,是否有选项可以这样做?当然我可以手动完成,但我觉得Core Data有一些自动执行此操作的方法。

2 个答案:

答案 0 :(得分:0)

CoreData仅为您提供“删除规则” - 如果您要删除 EntityA实例,它可以执行特定操作(例如Cascade)以删除所有相关的EntityB实例。

但是您的情况不同 - 您正在删除EntityA实例与之前分配给它的EntityB对象的所有实例之间的关系。 CoreDate无法确定代码背后的逻辑 - 也许您想要删除所有这些EntityB实例,但是您可能希望稍后将它们重新分配给EntityA的不同实例?或者使用“孤立的”EntityB对象做一些完全不同的事情?

因此,您有责任手动删除它们。

答案 1 :(得分:0)

首先:调用你的关系entities是非常难以理解的。也许这仅仅是出于这个例子的目的。否则,请争取具体和逻辑的自然语言变量名称。

第二:如果你想删除实体切断与他人的关系,只需删除它们即可。如您所料,Core Data为您带来了神奇的魅力。

确保您的父实体没有最小entities约束,否则您将获得验证失败。