我有两个与同一持久性商店交谈的进程。我将上下文保存在一个进程中,并发布分布式通知。另一个进程看到分布式通知,并再次获取其数据,但仍然接收旧数据。我需要做些什么“刷新”才能让其他流程从商店获取正确的数据吗?
编辑:所以,事实证明我正在正确地刷新数据。 NSManagedObjects具有用于执行此操作的“refreshObject:mergeChanges”方法。该问题似乎与时间有关。假设我有两个进程,A和B.进程A是主进程,并保存到数据库。然后,进程B对数据库执行保存,并向进程A发送通知,表示已执行此操作,并且进程A将获取新数据。我发现如果进程A的保存和进程B的保存太靠近,即使我刷新,进程A也会获取旧数据。如果我强制在两次保存之间有一段时间,那么它可以正常工作。
显然,这似乎是某种竞争条件,可能在数据实际保存到数据库之前发送通知,但是,通知在托管对象的didSave方法中发送,此时上下文已经保存。
答案 0 :(得分:1)
您应该检查merge policy
概念,以管理,获取和传达不同上下文之间持久存储协调器的正确值。
这应解决问题。
希望这可以提供帮助。