NSFetchedResultsController错过了对合并的NSManagedObjectContext的更新

时间:2011-06-01 06:52:30

标签: core-data merge nsfetchedresultscontroller nsmanagedobjectcontext

我有两个托管对象上下文A和B.这两个上下文在保存时通过将更改从一个更改为另一个来保持同步(通过监视NSManagedObjectContextDidSaveNotification)。我已经确认A和B的更改正在合并。

我对B进行了NSFetchedResultsController监视更新。我发现对A的某些更新不会导致在B.上触发nsfrc。当创建新的托管对象并将其添加到具有nsfrc属性的A时寻找(在B),nsfrc在B合并后从A的保存更改后触发。但是,如果托管对象已经存在于A(和B)上,我修改了对象并保存A,而我可以看到B正在合并A的保存通知中的更改,nsfrc监视B不会触发。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

我遇到了这个问题,似乎我已经解决了这个问题。我不知道我到底做了什么。我的意思是我做了几件事但不知道,哪一个成了解决方案。所以我只想描述......

我重构了我的代码以遵循一些“提示”,可以在官方文档和文档中找到。一些论坛:

  1. 如果您在另一个线程中管理NSManagedObjectContext,则应该在该线程中创建它,而不是以某种方式在那里传递。
  2. 你应该只在主线程中添加观察者(以获取合并的保存通知) - 这样它们也将在主线程中合并。
  3. (可选,但我做到了)您可以尝试仅在主线程中保存上下文,即使它是在后台线程中创建和管理的。
  4. 1& 3看起来更像是一些“魔术”,所以我认为你应该首先尝试跟随2。希望这会对你有所帮助。

答案 1 :(得分:0)

不确定这是否可以解决您的问题,但在合并A的更改后尝试在上下文B中调用processPendingChanges

另外,你的nsfrc是否使用缓存?尝试禁用缓存,看看它是否会对您的情况产生任何影响......