• 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: NSOutline and NSTreeController using bindings
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSOutline and NSTreeController using bindings


  • Subject: Re: NSOutline and NSTreeController using bindings
  • From: Hrishikesh Murukkathampoondi <email@hidden>
  • Date: Tue, 12 Oct 2010 18:59:42 +0530

Thanks for the response. I am still having a little trouble. Here is what I have done. I have set the keypaths and bindings of the NSTreeController and NSOutlineView as below.

myListRoot is a NSMutableArray containing NSTreeNode objects. I point the content array binding of the NSTreeController to this variable. My tree is only one level deep for now (I am still testing it). I add nodes to my tree in this fashion:

NSTreeNode *tn = [NSTreeNode treeNodeWithRepresentedObject:[NSString stringWithString:@"History"]];
[myListRoot addObject:tn];

MyDocument is KVC compliant with regard to myListRoot. After adding nodes I traversed the tree (simple for loop) and printed contents to check the data is correctly added.

I made the following bindings -

NSTreeController:
Key paths:
--------------
Children: childNodes

Since the nodes in the tree are objects of type NSTreeNode childNodes is the correct method to return children of a given node.

Bindings:
------------
Content Array: File's Owner myListRoot


I believe with the above bindings I have correctly tied the NSTreeController to my data. Is this correct?

I have made the following bindings in IB to bind elements in NSOutlineView to the NSTreeController.

NSOutlineView:
Bindings:
-----------
Controller Key: arrangedObjects
Selection Index Paths: selectionIndexPaths

Table Column Bindings:
---------------------
Controller Key: arrangedObjects
Model Key Path: representedObject

I expect that the table will send "representedObject" message to each NSTreeNode object to get the string to be printed in each cell.

When I run this I dont see the column in NSOutlineView populated. What am I doing incorrectly?

Hrishi


On 11-Oct-2010, at 1:50 AM, email@hidden wrote:

>
> Regards
>
>
>
> On 10 Oct 2010, at 19:55, Hrishikesh Murukkathampoondi wrote:
>>
>> NSOutlineView bindings -
>> 1. "Content" bound to NSTreeController's "arrangedObjects"
>> 2. "Selection Index Paths: to NSTreeController's "selectionIndexPaths"
>>
>> NSTableColumn bindings:
>> 3. "Value" is bound to arrangedObjects.name
>>
> These look okay.
>>
>> I have read the class reference for NSTreeController and NSOutlineView but I still dont understand how the above works. Foe example, how does the NSOutlineView know which values are leaves?
>>
>> NSOutlineView class ref document describes how to implement the data source if using conventional data sources. How does it work with bindings?
>>
>> The above "special" format for the contents array is not discussed any where.
>>
> The example creates a single node with three children.
> The 'special format' you refer is documented in NSTreeController.  Its not the array that is important, it's the objects within in it.
> In the example above we must presume that NSTreeController -childrenKeyPath has been set to @"children" (this may have been done in IB).
> This way the controller knows which method to call to traverse the tree (there is also a -leafKeyPath method).
>
> The contents array is an array of objects each of which acts as the root for a branch.
> In this case the object is a single NSDictionary object.
> This will be queried using -valueForKey:/-valueForKeyPath: which will ultimately invoke -objectForKey: on the dictionary.
>
> Basically you supply a readymade tree and bind it to the NSTreeController.
> Although an NSDictionary can be used for this purpose NSTreeNode is supplied specifically for this purpose.
> Create an array of NSTreeNode instances that will act as your roots.
> Then add your children to the roots as further NSTreeNode instances.
> Your model object can be supplied as the -representedObject in which case the binding key path typically looks like @"arrangedObjects.representedObject.name"
>
> An item in an NSOutlineView will be represented as an NSTreeNode (see the 10.5 release notes for this essential fact).
> However the tree that is returned is the NSOutlineView's currently displayed tree.
> Your NSTreeNode (or whatever representation  you have employed) instance is the item's representedObject.
> Hence to get to your model data you would invoke:
>
> NSTreeNode *outlineNode = [outlineView itemAtRow:row];
> NSTreeNode *myNode = [outlineNode representedObject];
> id myNodelData = [myNode representedObject];
>
> HTH
>
> Jonathan Mitchell
>
> Developer
> Mugginsoft LLP
> http://www.mugginsoft.com

_______________________________________________

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: NSOutline and NSTreeController using bindings
      • From: Hrishikesh Murukkathampoondi <email@hidden>
References: 
 >NSOutline and NSTreeController using bindings (From: Hrishikesh Murukkathampoondi <email@hidden>)
 >Re: NSOutline and NSTreeController using bindings (From: "email@hidden" <email@hidden>)

  • Prev by Date: remove icon from Dock
  • Next by Date: The dreaded "UITableView won't refresh" problem.
  • Previous by thread: Re: NSOutline and NSTreeController using bindings
  • Next by thread: Re: NSOutline and NSTreeController using bindings
  • Index(es):
    • Date
    • Thread