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 ([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]