On Jun 28, 2008, at 1:08 PM, Kyle Sluder wrote:
On Sat, Jun 28, 2008 at 2:14 PM, Bill Bumgarner <[EMAIL PROTECTED]> wrote:
You want -objectForKey:  -valueForKey: is for key value coding,
-objectForKey: is for extracting objects from a dictionary.

Shouldn't cause a problem.

I thought the collection classes were smart and treated -valueForKey:
by sending each object in the collection -valueForKey: and compiling
the results in an object arranged in the same way as the original.
That way you could have an array of strings and do something like
[myArray valueForKey:@"length"] to get an array of lengths
corresponding to each instance.

Sort of.  Depends on the collection class.  The behavior you describe
works for NSArray (and NSSet, IIRC).  For NSDictionary, the rules are
slightly different:
...

If key does not start with [EMAIL PROTECTED], invokes objectForKey:. If key does
start with [EMAIL PROTECTED], strips the [EMAIL PROTECTED] and invokes [super 
valueForKey:]with
the rest of the key.


The real problem is -valueForKeyPath: behaves magically differently on dictionaries from everything else. If the argument contains a "." character, the entire keypath is treated as a single key to - objectForKey: If the entire keypath does not exist in the dictionary, then it falls back to the normal -valueForKeyPath: behavior.

Basically, if you have a "." character in any of your keys, you can find some serious confusion. Say, if you ever use a DNS or reverse DNS names for a key. Like the contents of ~Library/Preferences

-valueForKey:  != -objectForKey:

Which is, frankly, a bit goofy and, thus, the primary reason why I
would avoid using -valueForKey: on a dictionary.

Amen.  It's slower, and people reading your code can get very confused.

- Ben

_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to