开发者

NSFetchedResultsController misses updates on merged NSManagedObjectContext

开发者 https://www.devze.com 2023-03-09 11:00 出处:网络
I have two managed object contexts, A and B.These two contexts are kept in sync by merging changes 开发者_如何学Pythonfrom one to the other whenever they\'re saved (by monitoring NSManagedObjectContex

I have two managed object contexts, A and B. These two contexts are kept in sync by merging changes 开发者_如何学Pythonfrom 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?


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.


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...

0

精彩评论

暂无评论...
验证码 换一张
取 消