>Date: Fri, 8 Oct 2010 13:47:18 +0200
>From: Remco Poelstra <re...@beryllium.net>
>Subject: Re: Problem using dictionary
>
>Ah, I should use valueForKeyPath:. Is there a reason valueForKey: is
>documented directly but valueForKeyPath: is not?

First off, this is an extremely common mistake. At least, it's common in
my life. If I had a dollar for every time I've said valueForKey: when I
should have said valueForKeyPath:, and then wondered why my code wasn't
working, I could afford a large Starbucks cappuccino.

That said, however, this is not a documentation problem but a knowledge
problem. *You* are the one who has evidently set up your dictionary plist
in such a way that you've got a dictionary with a key "page1", whose value
is something (another dictionary, perhaps?) with a key "fwRevCode". And
you must have been aware of this fact, because you yourself formed the
string "page1.fwRevCode" in order to get at it. So it's your own fault
that you claimed that this was a key when in fact it was a keypath. You
knew it was a keypath when you formed it; else, what's the dot for?

In other words, this has nothing whatever to do with NSDictionary. If
you're staring at the NSDictionary docs wondering where the documentation
for this is, you're staring in the wrong place. It has to do with KVC. If
this really is a dictionary in a dictionary, you could equally well have
chained two calls to objectForKey: and gotten at your data without using
KVC at all. That's how you get at a key's value with an NSDictionary. But
that isn't what you elected to do. You elected to use KVC; so it's up to
you to know KVC and use it properly.

m.


>
>Op 8 okt 2010, om 13:34 heeft Remco Poelstra het volgende geschreven:
>
>>Hi,
>>I've the following code:
>>NSDictionary *dict=[[NSDictionary alloc]
>>initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Indexes"
>>ofType:@"plist"]]; //This is actually a global initialized in
>>+initialize.
>>NSString *key=[NSString stringWithFormat:@"%...@.%@",page,property];
>>NSLog(@"%@",key);
>>NSLog(@"%@",[[dict valueForKey:key] description]);
>>NSLog(@"%@",[[[dict valueForKey:page] valueForKey:property]
>>description]);
>>The result from the code is:
>>page1.fwRevCode
>>(null)
>>6
>>The first and last are exactly what I expect. But why can't the
>>dictionary find the value with the full key?
>>


-- 
matt neuburg, phd = m...@tidbits.com, http://www.tidbits.com/matt/
pantes anthropoi tou eidenai oregontai phusei
Among the 2007 MacTech Top 25, http://tinyurl.com/2rh4pf
AppleScript: the Definitive Guide, 2nd edition
http://www.tidbits.com/matt/default.html#applescriptthings
Take Control of Exploring & Customizing Snow Leopard
http://tinyurl.com/kufyy8
RubyFrontier! http://www.apeth.com/RubyFrontierDocs/default.html
TidBITS, Mac news and reviews since 1990, http://www.tidbits.com




_______________________________________________

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