Core Data 在更新时应用删除规则

Posted

技术标签:

【中文标题】Core Data 在更新时应用删除规则【英文标题】:Core Data applying delete rule when updating 【发布时间】:2016-03-06 05:26:11 【问题描述】:

这里是 Core Data 的初学者,Core Data 中有一些非常基本的东西我不明白。我知道删除规则,例如,如果我的对象被删除,如果它具有级联关系,例如,这些关系也会被删除。但是更新会发生什么?

示例: 人与汽车有关系。删除规则是级联的。 人 --> 汽车 如果 Person 被删除,Car 也会消失。 但是现在如果 Person 只是指向另一辆 Car 怎么办,之前的 Car 不会被删除,只会在 DB 中晃来晃去。 有什么解决办法吗?

我认为理想情况下,您应该在设置新汽车之前删除第一辆汽车,但这是从服务器获取自动完成的。

【问题讨论】:

我在类似情况下所做的就是在更新后获取废弃的对​​象,并删除一个。级联删除是为了让您的工作更轻松,当它们应用时,但正如您发现的那样,它们仅在删除时触发。 【参考方案1】:

如果这是您在所有情况下都想要的行为,您可以覆盖托管对象子类方法来设置新关系。在该方法中,首先检查是否存在另一个对象,如果需要,将其删除。

例如

-(void) setCar:(Car *)car 
   if (Car* oldCar = self.car) 
        [self.managedObjectContext deleteObject:oldCar];
   
   [self willChangeValueForKey:@"car"];
   [self setPrimitiveValue:car forKey:@"car"];
   [self didChangeValueForKey:@"car"];

【讨论】:

以上是关于Core Data 在更新时应用删除规则的主要内容,如果未能解决你的问题,请参考以下文章

在应用程序运行时替换 Core Data sqlite 文件,数据不更新

用户更新软件后如何保存Core Data?

删除应用程序时是不是会从设备中删除 Core Data 数据库?

如何更新 Core Data 的用户界面?

从 Core Data 中删除和添加存储

Core Data 对象删除使应用程序崩溃