Thank you for the suggestion. I changed the code to use KVC like you suggested 
but it still makes no difference. But doing what you said along with calls to 
willChangeValueForKey and didChangeValueForKey

This worked:

-(void) awakeFromNib
{

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

}


Even if I don't use KVC to add entries to myListRoot sending a reloadData to 
the NSOutlineView should refresh the contents correct? It does not work when I 
do [myOutlineView reloadData] after I update myListRoot.

Style issues - I agree. But this is a example I am using to teach myself. It is 
not part of a larger project.

Hrishi


On 13-Oct-2010, at 12:43 AM, Chris Hanson wrote:

> This implies that you’re not manipulating your “myListRoot” property in a way 
> compliant with Key-Value Observing.
> 
> Just manipulating the instance variable will not post KVO notifications for 
> the property.  You need to manipulate the property (for example, by working 
> with the proxy NSMutableArray returned by [self 
> mutableArrayValueForKey:@"myListRoot"]) in a KVO-compliant fashion for 
> bindings to notice your changes to it.
> 
> In other words, I think your -awakeFromNib code probably looked like this:
> 
>   - (void)awakeFromNib {
>       myListRoot = [[NSArray alloc] initWithObjects:foo, bar, baz, nil];
>   }
> 
> It should look like this:
> 
>   - (void)awakeFromNib {
>       [[self valueForKey:@"myListRoot"] addObject:foo];
>       [[self valueForKey:@"myListRoot"] addObject:bar];
>       [[self valueForKey:@"myListRoot"] addObject:baz];
>   }
> 
> The reason it may have worked in -init is that when your bindings set up KVO 
> for the "myListRoot" property, they may have retrieved its initial value.
> 
> Also, just on a stylistic note, I wouldn't name a property something like 
> "list" in a Cocoa application to represent a collection presented in an 
> outline view; Cocoa's controls are "tables" and "outlines" rather than 
> "lists" and "trees."  (NSArrayController and NSTreeController use the terms 
> they do because they're about the structure of the data presented, not the 
> view; you can bind either an NSOutlineView or an NSBrowser to an 
> NSTreeController, for example.)  Ideally I'd name the property something more 
> related to what the data actually represents, e.g. "people" or "products."
> 
> -- Chris
> 
> 
> On Oct 12, 2010, at 6:52 AM, Hrishikesh Murukkathampoondi wrote:
> 
>> I moved the code populating myListRoot to the "-init" method of MyDocument.m 
>> and now it works. I was earlier populating it in "-awakeFromNib".
>> 
>> I am so tried putting it back in -awakeFromNib followed by a call to 
>> [mOutlineView reloadData] - but this did not work. 
>> 
>> So I have my NSOutlineView showing me the text stored in my data root tree. 
>> But cant explain the above behavior.
> 

_______________________________________________

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