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:
- If you manage
NSManagedObjectContext
in another thread, it should be created in that thread and not somehow passed there. - 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.
- (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...
精彩评论