2

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

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

有没有办法在不手动清理 B 的逆的情况下处理这个问题?(我有很多这样的关系,这是不好的做法,很难维持)

谢谢!

4

2 回答 2

2

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

有关详细信息,请参阅“核心数据编程指南”中的关系删除规则

于 2012-11-27T10:08:45.330 回答
1

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

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

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

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

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


我仍然不确定的事情:

  • 我尝试在一个单独的非常小的示例项目上复制它,但没有遇到问题。那么根本问题是什么?
  • 这是预期的行为还是错误?它在任何地方都有记录吗?
于 2017-06-08T13:03:25.897 回答