NSFetchedResultsController misses updates on merged NSManagedObjectContext

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-10 13:26:50

问题


I have two managed object contexts, A and B. These two contexts are kept in sync by merging changes from one to the other whenever they're saved (by monitoring NSManagedObjectContextDidSaveNotification). I've verified that changes to A and B are merging properly.

I have an NSFetchedResultsController monitoring updates to B. I find that certain updates to A do not result in the nsfrc firing on B. When a new managed object is created and added to A with the attributes the nsfrc is looking for (on B), the nsfrc fires after B merges changes from the save of A. However, if the managed object already exists on A (and B), and I modify the object and save A, while I can see that B is merging the changes from the save notification of A, the nsfrc monitoring B does not fire.

What am I missing here?


回答1:


I had this problem and it seems that I've solved it. I don't know what I did exactly. I mean I did a couple of things and don't know, which one became the solution. So I will simply describe...

I've refactored my code to follow some "hints", found in official docs & some forums:

  1. If you manage NSManagedObjectContext in another thread, it should be created in that thread and not somehow passed there.
  2. You should add observer (to get save notifications for merging) in main thread only - this way they will be also merged in the main thread.
  3. (Optional, but I did it) You can try to save context in main thread only even if it was created and managed in the background thread.

1 & 3 looks more like some "magic", so I think you should try to follow 2 first. Hope this will help you.




回答2:


Not sure if this would solve your problem, but try calling processPendingChanges on context B, after changes from A are being merged.

Also, does your nsfrc use caching? Try disabling the cache and see if it makes any difference in your case...



来源:https://stackoverflow.com/questions/6197330/nsfetchedresultscontroller-misses-updates-on-merged-nsmanagedobjectcontext

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!