iPhone核心数据:跨越多对一关系的级联删除

iPhone核心数据:跨越多对一关系的级联删除,第1张

概述我有两个A和B类,从A到B有多对一关系(多个A对象可以引用相同的B)。问题是,如果A侧的删除规则是Cascade,则只有当最后一个引用A被删除或者在第一次删除关联的A时,它才被删除。关系的B方的删除规则如果重要,则为Nullify。 另外,我在Core Data文档中看到,在某些情况下,可选标志很重要。但是,不清楚他们的关系与我的情况有关。他们在谈论一个遏制情况(B由A拥有),而我的情况是订阅/关 我有两个A和B类,从A到B有多对一关系(多个A对象可以引用相同的B)。问题是,如果A侧的删除规则是Cascade,则只有当最后一个引用A被删除或者在第一次删除关联的A时,它才被删除。关系的B方的删除规则如果重要,则为Nullify。

另外,我在Core Data文档中看到,在某些情况下,可选标志很重要。但是,不清楚他们的关系与我的情况有关。他们在谈论一个遏制情况(B由A拥有),而我的情况是订阅/关联(B与A相关)。

我可以简单地管理代码中的删除程序设计,但是如果可能的话,可以让Core Data做正确的事情。但是,我们不清楚Core Data中是否支持垃圾收集语义。

有什么建议么?

解决方法 我的目标与你显然相同(删除B,最后一次被删除)。花更长的时间才能得到这个权利。特别是因为

>当A准备删除时,B中的to-many关系可能尚未更新,因此您不能仅仅计算B中引用的A。
> isDeleted on A似乎已经在-prepareForDeletion中设置了

如果有人有兴趣,这可以帮助我(我会使用部门< - >> 员工,因为它更容易阅读):

员工人数:

- (voID)prepareForDeletion {    // Delete our department if we we're the last employee associated with it.    Department *department = self.department;    if (department && (department.isDeleted == NO)) {        nspredicate *predicate = [nspredicate predicateWithFormat:@"isDeleted == NO"];        NSSet *employees = [department.employees filteredSetUsingPredicate:predicate];        if ([employees count] == 0) {                       [self.managedobjectContext deleteObject:department];        }     }}

其他人也建议把这个逻辑放在部门里。我更喜欢上面的解决方案,因为在某些情况下(例如在手工商店迁移或数据导入期间),我实际上可能希望保存一个空的部门。

总结

以上是内存溢出为你收集整理的iPhone核心数据:跨越多对一关系的级联删除全部内容,希望文章能够帮你解决iPhone核心数据:跨越多对一关系的级联删除所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1039275.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存