gpt4 book ai didi

iPhone核心数据: Cascading delete across a many-to-one relationship

转载 作者:行者123 更新时间:2023-12-03 16:01:38 24 4
gpt4 key购买 nike

我有两个类 A 和 B,从 A 到 B 具有多对一关系(多个 A 对象可能引用同一个 B)。问题是,如果A端的删除规则是Cascade,那么B是只有在最后引用A的时候被删除,还是第一次引用A的时候才被删除呢?关联的 A 被删除。如果重要的话,关系 B 方的删除规则是无效。

此外,我在核心数据文档中读到,可选标志在某些情况下很重要。但尚不清楚他们所描述的关系与我的案件有何关系。他们谈论的是收容案例(B 属于 A),而我的案例是订阅/关联案例(B 与 A 相关)。

我可以简单地在代码中以编程方式管理删除,但希望允许 Core Data 在可能的情况下做正确的事情。但目前尚不清楚 Core Data 是否支持我正在寻找的垃圾收集语义。

有什么建议吗?

最佳答案

我的目标显然与您相同(删除最后引用的A后立即删除B)。我花了比预期更长的时间才把这件事做好。特别是因为

  • A准备删除时,B中的一对多关系可能还没有更新,所以不能只算A B中引用。
  • A 上的 isDeleted 似乎已在 -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];
}
}
}

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

关于iPhone核心数据: Cascading delete across a many-to-one relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2204150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com