Thanks to all for the answers. Since I wasn't planning on a tree type view, I 
missed the inherent tree nature of the model. So having a mediating layer of 
objects (Nodes) seems to be the way to go.

Martin



On 12, Jun, 2011, at 10:08 PM, Quincey Morris wrote:

> On Jun 12, 2011, at 12:12, Martin Hewitson wrote:
> 
>> Suppose I have a model object Parent which contains an array of Child 
>> objects.
>> 
>> Then I have a ParentView object and a corresponding ParentViewController. 
>> The controller has a reference to the Parent and to the ParentView and so 
>> can act as a data source for the view.  So far, so good.
>> 
>> What I'm unsure about is, how to deal with the children objects. I will, in 
>> principle, have a ChildView. This raises some questions:
>> 
>> 1) Should I have a ChildViewController class?
>> 2) Where do I keep the array of ChildView classes? In the ParentView? And 
>> how do I ensure that each ChildView is associated with the appropriate Child 
>> object?
>> 3) If I do have a ChildViewController class, where should I keep the array 
>> of these? In the ParentViewController? 
> 
> Here's how I've done this:
> 
> -- You need a class to represent your data model objects in the user 
> interface. In the past I've rolled my own, but now I would suggest starting 
> with NSTreeNode and subclassing it.
> 
> -- In your NSTreeNode subclass, add a "representation" property of type 'id' 
> to go along with the "representedObject" property it already has. Note that 
> you only need one NSTreeNode subclass, since you find out what an instance is 
> used for by looking at the class of the instance's "representedObject" and/or 
> "representation" objects. (In particularly complex designs it might be 
> worthwhile having multiple subclasses, but I wouldn't do that unless it 
> proved necessary.)
> 
> -- The tree node's "representedObject" is set, of course, to a Parent or 
> Child or other object in your data model.
> 
> -- The tree node's "representation" is set to a NSViewController (possibly a 
> subclass if you need it) that represents the ParentView or ChildView.
> 
> -- By setting the tree node's "parent" and "children" relationships, you 
> construct a hierarchy of tree nodes that encapsulate both the data model (via 
> "representedObject") and the views (via "representation"). The hierarchy 
> often matches the hierarchy in the data model, but it doesn't have to.
> 
> -- It's often convenient to have some tree nodes (e.g. a root node) that 
> don't correspond to a data model object, and you can set the 
> "representedObject" to nil or something else. Similarly, it's often 
> convenient to have some that don't correspond to a view. In that case, I 
> typically set the representation to a string. Sometimes the string *is* the 
> representation of the object that you want to draw somewhere in the UI (e.g. 
> in an outline view); sometimes you can use it just as a way of recognizing 
> the node.
> 
> In your controller, you work with the tree nodes primarily, because you can 
> get from them to the data model and the views.
> 
> If you need a ParentViewController and/or a ChildViewController that's a 
> subclass of NSViewController -- and you probably will -- then by all means 
> use them. They're mediating controllers, though.
> 
> For your coordinating controller, you almost always should use a window 
> controller subclass, and *not* (for example) the ParentViewController. The 
> window controller is responsible for building and maintaining the tree nodes, 
> and for arranging for the correct set of parent and child views to be visible 
> at any given time. Almost all of such behavior needs to consider the window 
> context as a whole, so it tends to confuse matters to tie the behavior to a 
> specific view.
> 
> I believe that the above arrangement makes use of the current "best 
> practices" for window controllers, view controllers and views, and I've found 
> the design pattern very easy to work with.
> 
> HTH
> 
> 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Martin Hewitson
Albert-Einstein-Institut
Max-Planck-Institut fuer 
    Gravitationsphysik und Universitaet Hannover
Callinstr. 38, 30167 Hannover, Germany
Tel: +49-511-762-17121, Fax: +49-511-762-5861
E-Mail: [email protected]
WWW: http://www.aei.mpg.de/~hewitson
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~





_______________________________________________

Cocoa-dev mailing list ([email protected])

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 [email protected]

Reply via email to