Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSFetchedResultsController misses updates on merged NSManagedObjectContext

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?

like image 275
thrusty Avatar asked Jun 01 '11 06:06

thrusty


1 Answers

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.

like image 50
kpower Avatar answered Nov 03 '22 15:11

kpower