Core data NSFetchedResultsController错过合并的NSManagedObjectContext上的更新
我有两个托管对象上下文A和B。这两个上下文在保存时通过将更改从一个合并到另一个来保持同步(通过监视Core data NSFetchedResultsController错过合并的NSManagedObjectContext上的更新,core-data,merge,nsfetchedresultscontroller,nsmanagedobjectcontext,Core Data,Merge,Nsfetchedresultscontroller,Nsmanagedobjectcontext,我有两个托管对象上下文A和B。这两个上下文在保存时通过将更改从一个合并到另一个来保持同步(通过监视NSManagedObjectContextDidSaveNotification)。我已验证对A和B的更改是否正确合并 我有一个NSFetchedResultsController监控对B的更新。我发现对A的某些更新不会导致在B上触发nsfrc。当使用nsfrc正在查找的属性(在B上)创建新的托管对象并将其添加到A时,nsfrc会在B合并A保存的更改后触发。但是,如果A(和B)上已经存在托管对象,
NSManagedObjectContextDidSaveNotification
)。我已验证对A和B的更改是否正确合并
我有一个NSFetchedResultsController
监控对B的更新。我发现对A的某些更新不会导致在B上触发nsfrc。当使用nsfrc正在查找的属性(在B上)创建新的托管对象并将其添加到A时,nsfrc会在B合并A保存的更改后触发。但是,如果A(和B)上已经存在托管对象,并且我修改了该对象并保存了A,而我可以看到B正在合并A的保存通知中的更改,则nsfrc监控B不会触发
我错过了什么 我遇到了这个问题,看来我已经解决了。我不知道我到底做了什么。我的意思是,我做了几件事,但不知道哪一件成为了解决方案。所以我将简单地描述 我对代码进行了重构,以遵循官方文档和一些论坛中的一些“提示”:
NSManagedObjectContext
,则应该在该线程中创建它,而不是以某种方式传递给该线程1和3看起来更像一些“魔法”,所以我认为你应该先尝试跟随2。希望这能对您有所帮助。不确定这是否能解决您的问题,但在合并A中的更改后,尝试在上下文B上调用
processPendingChanges
此外,您的nsfrc是否使用缓存?尝试禁用缓存,看看它对您的情况是否有任何影响…让我澄清一下,NSFetchedResultsController正在搜索的谓词是一个简单的布尔属性“marked==YES”。如果nsfrc正在监视托管对象上下文,它将始终触发这些更新。如果它在监视B,它只看到添加到A的对象,而不是在A中修改的对象。谓词是针对
B
实体还是A
实体运行的?看看我的“解决方案”(如果可以这样称呼的话)-我的NSFetchedResultsController
使用缓存,现在没有问题了。所以问题肯定不在缓存中。我已经重构了我的代码,虽然这不是完整的答案,但线程问题似乎是根本原因。