删除核心数据对象和;反向关系

时间:2012-11-27 09:50:07

标签: ios core-data relationship inverse

我有一个对象(A)与另一个对象(B)有To-Many关系。 此外,B与A成反比关系。

当我删除B时,它仍显示在A的关系船计数上,除非我在删除前手动清除B的反向关系。 我希望它同步发生,所以我可以更新UITableView并删除B的行, 而不是等待MOC的保存操作完成。

如果没有手动清洁B的反转,有没有办法处理? (我有很多这些关系,这将是不好的做法,并且很难维护)

谢谢!

2 个答案:

答案 0 :(得分:2)

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

有关详细信息,请参阅“核心数据编程指南”中的Relationship Delete Rules

答案 1 :(得分:1)

差不多5年后(现在在iOS 10),我偶然发现了同样的问题。

我决定优化'应用程序开始崩溃通过从几乎所有地方删除saveContext(),认为内存中的表示保证是正确的(因为includesPendingChanges默认为true)。

但是我收到了描述的问题(因为稍后需要更新一些UITableView,应用程序崩溃了。)

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

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


我仍然不确定的事情:

  • 我尝试在一个单独的非常小的示例项目上复制它,但我没有得到问题。那么潜在的问题是什么?
  • 这是预期的行为还是错误?是否记录在任何地方?