title: NSArrayControllers and heterogeneous arrays of Core Data objects
body: <p>I'm trying to create a Mac OS Core Data application that has an array of parent objects (called Levels) each of which contains a collection of child objects (called Blocks) via a one-to-many relationship.  I have a table view successfully controlling the array of levels, and a custom view object that draws the blocks graphically based on positions held in x and y properties of my Block model class.  I can add blocks to the currently selected level, remove them, select and move them around in the custom view, and have bound text fields to various other properties of the Block class which I can use to edit those values.  All of this information is successfully saved and restored to and from the core data repository with no issues output to the debugger.  Wonderful.  I've used an NSArrayController for the Levels and another for the Blocks that is bound to the current selection of the Levels array controller, in what I've read is a pretty standard way.</p>
  
  <p>Now, my Block class is actually an abstract class, and what I actually instantiate are various child classes of Block (eg RedBlock, GreenBlock, BlueBlock classes).  Each sub-class has a separate set of properties that only apply to that type of block (so RedBlock has a "text" property that none of the others have, BlueBlock has an integer "value" property, etc).  I want to create an inspector that will change depending on the type of the Blocks that are currently selected in my custom view.  To try this, before I start creating subviews for each type of Bock, I have created a text field that I want to bind to the currently selected RedBlock's "text" property, preferably showing nothing when Blocks of other kinds are selected.  This is where I'm stuck.  I've added another NSArrayController in Entity mode with RedBlock specified as it's type so I can bind to the "text" property, and tried adding a filter predicate based on the class type.  I've also tried various other configurations and bindings, but I'm either getting exceptions, or corrupt values in the text field that I bind to that controller, or other weird bugs and general brokenness.  </p>
  
  <p>I've googled around for an example of an inspector that can cope with a heterogenous array of objects (as that's essentially what I'm trying to do) but so far no luck.</p>
  
  <p>So, my question is - am I going about this the right way?  Should I be trying to create an NSArrayController that filters the selected items in my Blocks array controller somehow?  If so, should that be straightforward or is there some trick that I've missed?  If not, what is the best way to do this?</p>