19. CoreData 关系的4种删除规则
作者: Vong_HUST
由于项目是基于 CoreData 的,所以 CoreData 方面遇到的问题比较多。今天主要为大家分享一下 CoreData 中关系的4种删除规则。
先假设我们有两个实体,Blog 和 Category,一篇 Blog 只能属于一个 Category,一个 Category 可以有多篇 Blog。如图:

1.No Action
规则为 No Action 时,当 category 删除时, blogs 是不会被通知到的,由于 CoreData 里关系是双向的,blog 这边依然认为他被关联到对应的 category。这种规则到目前还没用到过,也没有具体的使用场景,如果设置成 No Action,如果操作不当,可能会有崩溃发生。
2.Nullify
还是拿上面举例,如果 category 被删除,blog 对应的 category 关系会被置为 nil。这个是系统默认删除规则,也是日常中用的最多的删除规则。
3.Cascade
Cascade 规则某些场景下也十分有用。还是用上面例子,一般情况下,我们想 category 被删除之后,其拥有的所有 blog 实例也要删除,那这个时候直接将删除规则设置成这个即可。CoreData 在 category 删除后会自动将其关联的 blog 也全部删除。但这种情况一般只存在与一对多(或一对一)的情况,如果是多对多,就不适合用这种规则。
4.Deny
这个规则刚好和 Cascade 相反,category 只有在其所拥有的 blogs 都被删除的情况下才会被删除。这种情况在我们项目中,也没有具体使用场景。
综上,一般业务场景下 Nullify 和 Cascade 规则已经可以满足。如果有其他特殊场景也可以考虑1和4。欢迎补充和讨论~
Last updated
Was this helpful?