自动生成的核心数据访问器返回已删除的对象

时间:2019-05-13 14:35:55

标签: ios core-data

我有两个简单的核心数据模型:患者和治疗。患者与治疗之间存在一对多的关系,因此一个患者可以接受多种治疗,但是每个治疗始终只有一名患者。

Patient + CoreDataProperties.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延迟重新加载表-没有帮助。

已删除的处理处于故障状态;这是否意味着我需要手动从NSSet处理中踢出有缺陷的物体?我该怎么做才能强制Core Data更新NSSet处理?

如果我终止应用程序并重新启动,则删除的处理将消失。

1 个答案:

答案 0 :(得分:1)

回答我自己的问题...

经过半天的尝试和错误,我发现打电话给

[moc refreshObject:patient],

作为对更改通知的响应,导致删除的处理方法一直徘徊,直到应用重新启动。删除治疗方法也会触发通知,因此可能会有某种...副作用。