删除 CoreData 对象和反向关系



我有一个与另一个对象(B)具有多对多关系的对象(A)。此外,B与A的关系相反。

当我删除B时,它仍然显示在A的关系发货计数上,除非我在删除前手动清理B的反向关系。我希望它同步发生,这样我就可以更新UITableView并删除B的行,而不是等待主运行中心的保存操作完成。

有没有什么方法可以在不手动清洁B的反面的情况下处理它?(我有很多这样的关系,这将是一种糟糕的做法&很难维持)

谢谢!

如果您在Xcode中的核心数据模型检查器中将从B到A的反向关系的"删除规则"设置为"Nullify",那么这应该会自动工作。

有关更多信息,请参阅"核心数据编程指南"中的关系删除规则。

大约5年后(现在是iOS 10),我偶然发现了同样的问题。

在我决定通过从几乎所有地方删除saveContext()来"优化"事物后,应用程序开始崩溃,因为我认为内存中的表示是正确的(因为默认情况下includesPendingChangestrue)。

然而,我得到了描述的问题(因为后来需要更新一些UITableView,应用程序崩溃了)。

以下是四种不同的方法,其中任何一种都解决了我的问题:(根据我的判断,从最好到最坏排序)

  • 删除后调用processPendingChanges()(在NSManagedObjectContext上)
  • 删除后调用refreshAllObjects()(在NSManagedObjectContext上)
  • 删除后调用saveContext()(正如其他人在评论中指出的那样)
  • 只是在等待。例如将取决于正确数据的代码的执行延迟0.1秒左右(使用DispatchQueue.main.asyncAfter)。(当然,这是迄今为止最糟糕的方法,您不应该实施它)


我仍然不确定的事情:

  • 我尝试在一个单独的非常小的示例项目中复制它,但我没有遇到问题。那么,根本问题是什么呢
  • 这是预期行为还是错误?有记录吗

最新更新