Coredata删除规则混淆,xcode

Jam*_*nay 27 iphone xcode core-data objective-c ios

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

Entity A                        Entity B
aRelationship <-------------->> bRelationship
Run Code Online (Sandbox Code Playgroud)

将删除规则设置为级联.

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

[context deleteObject:EntityA];
Run Code Online (Sandbox Code Playgroud)

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

请问有人可以解释一下我的困惑吗?

非常感谢你.

Tec*_*Zen 90

虽然在图形数据模型编辑器中并不是立即显示每个相关联关系,即每个

<--> 
Run Code Online (Sandbox Code Playgroud)

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

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

Alpha.betas<-->>Beta.alpha
Run Code Online (Sandbox Code Playgroud)

...那么你真的有两个这样的关系:

Alpha.betas--(delete rule)-->>Beta.alpha
Beta.alpha--(delete rule)-->Alpha.betas
Run Code Online (Sandbox Code Playgroud)

永远不想像这样设置删除规则:

Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(cascade)-->Alpha.betas
Run Code Online (Sandbox Code Playgroud)

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

你真正想要的是:

Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(nullify)-->Alpha.betas
Run Code Online (Sandbox Code Playgroud)

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

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