• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag
 

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Merge changes between two Managed Object Contexts
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Merge changes between two Managed Object Contexts


  • Subject: Re: Merge changes between two Managed Object Contexts
  • From: Joanna Carter <email@hidden>
  • Date: Mon, 22 Mar 2010 09:58:47 +0000

Hi Austin

> Thank you Joanna, that was very helpful.  So, from your experience, mergeChangesFromContextDidSaveNotification: will not pick up adding a new object, just editing an existing one?  It seems like the real pain point is having to re-create the new object in the second managedObjectContext and copy all it's properties.

My tutorial is meant to demonstrate several different techniques, to give people an idea of what is available, especially if they are coming from a different programming language.

I included the routine for copying the object contents, possibly because I too came across Tim Isted's blog and, at the time, thought that was what was necessary to ensure that object properties were populated from the correct MOC.

However, I have just checked and found that you can, indeed, use the same methodology for both editing and adding a new object. Here is some revised code that you can use in place of the sheetDidEnd:returnCode:contextInfo: method in the tutorial.

- (void) sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
  // we are only interested in doing something with the edited word
  // if the Save button was pressed
  if (returnCode == NSOKButton)
  {
    NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];

    [dnc addObserverForName:NSManagedObjectContextDidSaveNotification
                     object:managedObjectContext
                      queue:nil
                 usingBlock:^(NSNotification *saveNotification)
     {
       [[sourceListController managedObjectContext] mergeChangesFromContextDidSaveNotification:saveNotification];

       [sourceListController fetch:nil];
     }];

    NSError *error;

    if (![managedObjectContext save:&error])
    {
      NSLog(@"Error saving edited Word");
    }

    [dnc removeObserver:self
                   name:NSManagedObjectContextDidSaveNotification
                 object:managedObjectContext];
  }
  else
  {
    // Cancel button pressed -
    // rollback any changes to the temporary context
    [managedObjectContext rollback];
  }

  // close the dialog
  [sheet orderOut:self];

  // clear temporary object from controller
  [wordController setContent:nil];
}

The only real difference here is that, within the callback block, you need to call [sourceListController fetch:nil] to ensure that the original browsing list is not just refreshed but that the sort descriptors are honoured to include the new object.

Regards

Joanna

--
Joanna Carter
Carter Consulting

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Merge changes between two Managed Object Contexts
      • From: Austin Grigg <email@hidden>
References: 
 >Merge changes between two Managed Object Contexts (From: Austin Grigg <email@hidden>)
 >Re: Merge changes between two Managed Object Contexts (From: Joanna Carter <email@hidden>)
 >Re: Merge changes between two Managed Object Contexts (From: Austin Grigg <email@hidden>)

  • Prev by Date: Re: ATTR_CMN_CHGTIME
  • Next by Date: Re: ATTR_CMN_CHGTIME
  • Previous by thread: Re: Merge changes between two Managed Object Contexts
  • Next by thread: Re: Merge changes between two Managed Object Contexts
  • Index(es):
    • Date
    • Thread