Joanna,

That worked perfectly.  Thanks for taking the time to help me out -- it always 
bugs me when something takes 10 extra steps and I have a gut feeling it can be 
done in one.  mergeChangesFromContextDidSaveNotification: was the key to making 
the changes from the second context a simple thing to accomplish.

The tutorial was great, very well put together.

Austin

On Mar 22, 2010, at 5:58 AM, Joanna Carter wrote:

> 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 (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to