Using valueForKeyPath on NSDictionary if a key starts the @ symbol?

If you have no control over the naming, how about adding a category with a properly named key that simply returns/sets the weird key?


you shouldn't be using @ signs with your key names if you want to use key value coding.

apple's guidelines for key names are as follows:

Keys must use ASCII encoding, begin with a lowercase letter, and may not contain whitespace.

You'll have to find a workaround to reformat the key string whereever you're getting your keys from to be KVC compliant.


Just to update this old question a little...

The reason that these:

[dict valueForKeyPath:@"[email protected]"]
[dict valueForKeyPath:@"key1.@@specialKey.key3"]

...fail is that any "@" symbols in a key path are interpreted as being collection's operators as with:

[dict valueForKeyPath:@"[email protected]"] // returns the sum of all 'key3' values
[dict valueForKeyPath:@"[email protected]"] // returns the average of all 'key3' values

The nested key calls:

[[[dict objectForKey:@"key1"] objectForKey:@"@specialKey"] objectForKey:@"key3"]

... work because a single key is not processed as a key path.