NSManagedObjectContext具有不同的进程

时间:2011-10-20 03:23:06

标签: objective-c cocoa core-data nsmanagedobject nsmanagedobjectcontext

我有两个与同一持久性商店交谈的进程。我将上下文保存在一个进程中,并发布分布式通知。另一个进程看到分布式通知,并再次获取其数据,但仍然接收旧数据。我需要做些什么“刷新”才能让其他流程从商店获取正确的数据吗?

编辑:所以,事实证明我正在正确地刷新数据。 NSManagedObjects具有用于执行此操作的“refreshObject:mergeChanges”方法。该问题似乎与时间有关。假设我有两个进程,A和B.进程A是主进程,并保存到数据库。然后,进程B对数据库执行保存,并向进程A发送通知,表示已执行此操作,并且进程A将获取新数据。我发现如果进程A的保存和进程B的保存太靠近,即使我刷新,进程A也会获取旧数据。如果我强制在两次保存之间有一段时间,那么它可以正常工作。

显然,这似乎是某种竞争条件,可能在数据实际保存到数据库之前发送通知,但是,通知在托管对象的didSave方法中发送,此时上下文已经保存。

1 个答案:

答案 0 :(得分:1)

您应该检查merge policy概念,以管理,获取和传达不同上下文之间持久存储协调器的正确值。

此处 - > http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdChangeManagement.html#//apple_ref/doc/uid/TP30001201-CJBDBHCB

这应解决问题。

希望这可以提供帮助。