Re: reloading an NSTreeController
Re: reloading an NSTreeController
- Subject: Re: reloading an NSTreeController
- From: Jonathan Dann <email@hidden>
- Date: Sat, 2 Aug 2008 23:51:37 +0100
On 1 Aug 2008, at 14:04, Gerriet M. Denkmann wrote:
But all disclosure triangels are now closed. Is there some way to
reopen them to the previous state?
I have the strong feeling that I will have to handle this myself.
Ok. So be it.
It's a common problem. Can I point you here:
http://www.cocoabuilder.com/archive/message/cocoa/2008/2/23/199705
int numberOfRows = [ outlineView numberOfRows ];
for( int row = 0; row < numberOfRows; row++ )
{
id item = [ outlineView itemAtRow: row ]; //
_NSArrayControllerTreeNode
BOOL isExpanded = [ outlineView isItemExpanded: item ];
if (isExpanded)
{
NSString *key = [ item valueForKey: @"Key" ]; <--- does not work.
};
};
The objects in myContentArray are key value coding-compliant for the
key Key.
But I get the error message: [<_NSArrayControllerTreeNode 0x3f1fd0>
valueForUndefinedKey:]: this class is not key value coding-compliant
for the key Key.
This will not work as in the line:
NSString *key = [ item valueForKey: @"Key" ];
you're effectively doing this:
NSString *key = [item Key];
which clearly won't work as whatever class your 'item' is doesn't have
a method with the signature: Key. For this to work you'd need -Key
(and then likely -setKey:) in your class. I'd have another look at
the documentation on KVC.
http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueCoding/KeyValueCoding.html
If, for example I were to have the class:
@interface MyClass : NSObject {
NSArray *myArray;
}
- (void)setMyArray:(NSArray *)newValue;
- (NSArray *)myArray;
@end
Then I could safely do this:
MyClass *item = [[[MyClass alloc] init] autorelease];
NSArray *anArray = [item valueForKey:@"myArray"];
or
NSString *key = @"myArray";
MyClass *item = [[[MyClass alloc] init] autorelease];
NSArray *anArray = [item valueForKey:key];
Having said all this, isn't _NSArrayControllerTreeNode private, with
all the caveats that apply to using private classes. You're not
guaranteed that instances of this class with respond to *anything*.
Hope this helps,
Jonathan
http://espresso-served-here.com
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________
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