我有两个简单的核心数据模型:患者和治疗。从患者到治疗都有一对一的关系,因此患者可以进行多种治疗,但是每种治疗始终都有一个患者。
有一个称为治疗的患者的自动生成的登记属性,在患者 核心核桃中定义。H:
@property (nullable, nonatomic, retain) NSSet<Treatment *> *treatments;
我有一个病人的观点,列出了他/她的所有治疗方法。用户可以从列表中删除处理。
当我删除与患者相关的治疗(他们都是这样(时:
[managedObjectContext deleteObject:treatment];
/* I even tried this: */
NSMutableSet *treatments = [patient mutableSetValueForKey:@"treatments"];
if ([treatments containsObject:treatment]) {
/* this actually is the case */
[treatments removeObject:treatment];
patient.treatments = treatments;
}
[managedObjectContext save];
patient.treatments
属性仍然包含已删除的处理。我还尝试使用dispatch_async
延迟表重新加载 -
删除的治疗处于断层状态;这是否意味着我需要手动从治疗方法中踢出错误的物体?我该怎么做才能强制核心数据更新治疗方法?
如果我终止应用程序并重新启动,则已删除的处理已消失。
回答我自己的问题...
尝试和错误半夜后,我发现呼叫
[moc refreshObject:patient],
作为对变更通知的响应,导致删除的治疗方法在App重新启动之前徘徊。删除处理也触发了通知,因此也许存在某种...副作用。