我有一个与另一个对象(B)具有多对多关系的对象(A)。此外,B与A的关系相反。
当我删除B时,它仍然显示在A的关系发货计数上,除非我在删除前手动清理B的反向关系。我希望它同步发生,这样我就可以更新UITableView并删除B的行,而不是等待主运行中心的保存操作完成。
有没有什么方法可以在不手动清洁B的反面的情况下处理它?(我有很多这样的关系,这将是一种糟糕的做法&很难维持)
谢谢!
如果您在Xcode中的核心数据模型检查器中将从B到A的反向关系的"删除规则"设置为"Nullify",那么这应该会自动工作。
有关更多信息,请参阅"核心数据编程指南"中的关系删除规则。
大约5年后(现在是iOS 10),我偶然发现了同样的问题。
在我决定通过从几乎所有地方删除saveContext()
来"优化"事物后,应用程序开始崩溃,因为我认为内存中的表示是正确的(因为默认情况下includesPendingChanges
是true
)。
然而,我得到了描述的问题(因为后来需要更新一些UITableView
,应用程序崩溃了)。
以下是四种不同的方法,其中任何一种都解决了我的问题:(根据我的判断,从最好到最坏排序)
- 删除后调用
processPendingChanges()
(在NSManagedObjectContext
上) - 删除后调用
refreshAllObjects()
(在NSManagedObjectContext
上) - 删除后调用
saveContext()
(正如其他人在评论中指出的那样) - 只是在等待。例如将取决于正确数据的代码的执行延迟0.1秒左右(使用
DispatchQueue.main.asyncAfter
)。(当然,这是迄今为止最糟糕的方法,您不应该实施它)
我仍然不确定的事情:
- 我尝试在一个单独的非常小的示例项目中复制它,但我没有遇到问题。那么,根本问题是什么呢
- 这是预期行为还是错误?有记录吗