title: Exception thrown observing NSManagedObjectContext saving
body: <p>I get the following exception <code>An observer of NSManagedObjectContextDidSaveNotification illegally threw an exception.  Objects saved = {
      inserted = "{(\n)}";
      updated = "{(\n    &lt;FJCDSeriesPreferences: 0x1744b30e0&gt; (entity: SeriesPreferences; id: 0xd000000000700012 &lt;x-coredata://29345DF0-9D92-410F-9305-84BFA1672BB9/SeriesPreferences/p28&gt; ; data: {\n    isFavourite = 0;\n    region = us;\n    series = \"0xd00000000d840010 &lt;x-coredata://29345DF0-9D92-410F-9305-84BFA1672BB9/Series/p865&gt;\";\n    seriesID = 955129;\n})\n)}";
  } and exception = [&lt;FJCDSeriesPreferences 0x1744b30e0&gt; valueForUndefinedKey:]: the entity SeriesPreferences is not key value coding-compliant for the key "program". with userInfo = {
      NSTargetObjectUserInfoKey = "&lt;FJCDSeriesPreferences: 0x1744b30e0&gt; (entity: SeriesPreferences; id: 0xd000000000700012 &lt;x-coredata://29345DF0-9D92-410F-9305-84BFA1672BB9/SeriesPreferences/p28&gt; ; data: {\n    isFavourite = 0;\n    region = us;\n    series = \"0xd00000000d840010 &lt;x-coredata://29345DF0-9D92-410F-9305-84BFA1672BB9/Series/p865&gt;\";\n    seriesID = 955129;\n})";
      NSUnknownUserInfoKey = program;
  }</code></p>
  
  <p>Here is the code that is causing the problem</p>
  
  <pre><code>-(void)contextDidUpdate:(NSNotification *)note{
      NSManagedObjectContext *incomingContext = [note object];
      NSDictionary *userInfo = [[note userInfo] copy];
      if (self.context != incomingContext){
          //Do not track
          return;
      }
  predicateWithFormat:@"program.objectId IN %@", _objectsToFetch];
      NSPredicate *programIDPredicate = [NSPredicate predicateWithFormat:@"%K like %@", @"program.objectId", _objectsToFetch ];
  
      NSSet *inserted = [userInfo objectForKey:@"inserted"];
      if ([inserted count]){
          //objects have been inserted
          self.insertedObjectsBlock([inserted allObjects]);
  
      }
  
      NSSet *deleted = [[[userInfo objectForKey:@"deleted"] copy ]filteredSetUsingPredicate:programIDPredicate];
      if ([deleted count]){
          //objects have been deleted
          self.deletedObjectsBlock([deleted allObjects]);
      }
  
      NSSet *updated = [[[userInfo objectForKey:@"updated"] copy]filteredSetUsingPredicate:programIDPredicate];
      if ([updated count]){
          //objects have been updated
          self.updatedObjectsBlock([updated allObjects]);
      }   
  }
  </code></pre>
  
  <p>The issue is occurring around the predicate, since not all of the entities that are updating key-value compliant for the properties IM trying to access. What IM trying to do is to find objects that have changed and see if they are related to a particular relationship, in this case seeing if a preference is related to a program. </p>