Coredata删除规则混淆,xcode

时间:2011-08-22 17:08:05

标签: iphone objective-c ios xcode core-data

我在两个实体之间有一个核心数据关系,如下所示:

Entity A                        Entity B
aRelationship <-------------->> bRelationship

将删除规则设置为级联。

也许我有这个错误,但我认为如果这两个关系的删除规则都设置为“Cascade”,那么以后是什么时候......

[context deleteObject:EntityA];

...它还会删除与之关联的所有实体B.但是,当我记录我的所有实体B时,我似乎错了。

有人可以对我的困惑有所了解吗?

非常感谢你。

2 个答案:

答案 0 :(得分:90)

虽然在图形数据模型编辑器中没有立即显示每个对象关系,即每个

<--> 

...实际上是两个独立的关系,每个关系都有自己的删除规则。删除具有删除规则的实体的对象时,将激活删除规则。

因此,如果在数据模型编辑器中,您有两个实体AlphaBeta具有关系:

Alpha.betas<-->>Beta.alpha

...那么你真的有两种关系:

Alpha.betas--(delete rule)-->>Beta.alpha
Beta.alpha--(delete rule)-->Alpha.betas

从不 想要设置这样的删除规则:

Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(cascade)-->Alpha.betas

...因为删除任何一个Beta实例将删除将触发删除所有相关Alpha对象的关联Beta对象。根据数据模型的详细信息,互惠级联可以偶然删除大部分数据。

你真正想要的是:

Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(nullify)-->Alpha.betas

现在,当您删除Alpha对象时,它将删除所有关联的Beta对象。

当级联被阻止时,通常是需要关系的问题。没有数据模型的细节,无法确定。

答案 1 :(得分:3)

这取决于您使用的删除规则。

以下是Apple在其文档中所说的内容:

  

“当您删除托管对象时,重要的是要考虑它   关系,特别是为其指定的删除规则   关系。如果所有托管对象的关系都删除规则   是Nullify,然后对于该对象至少没有额外的工作   做(你可能要考虑其他对象)   关系的目的地 - 如果反向关系是   强制性或基数的下限,然后是目的地   对象或对象可能处于无效状态)。如果有关系   删除规则是Cascade,然后删除一个对象可能会导致   删除其他人。如果规则是拒绝,那么在删除之前   对象必须从中删除目标对象   关系,否则在保存时会出现验证错误。   如果删除规则为“无操作”,则必须确保删除   无需任何步骤来确保对象的完整性   图“。

“关系删除规则”的链接:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW1