Error getting valueForKey in an NSDictionary for key containing @ character

cocoa-touch, ios, nsdictionary, nsstring, objective-c

Solution

try

NSString * robot_type = [robotDesign objectForKey:@"@type"];

or remove the leading `@`

from the docs:

`valueForKey:` Returns the value associated with a given key.

`- (id)valueForKey:(NSString *)key` Parameters key The key for which to return the corresponding value. Note that when using key-value coding, the key must be a string (see “Key-Value Coding Fundamentals”).

Return Value The value associated with key.

Discussion If key does not start with “@”, invokes objectForKey:. If key does start with “@”, strips the “@” and invokes [super valueForKey:] with the rest of the key.

The `@` leads to call the implementation of the `valueForKey:` of the superclass of NSDictionary. But NSObject does not know anything about the key `type`.

Problem

I am trying to get the value of "@type" key in the following NSDictionary named 'robotDesign' ``` robotDesign : { "@id" = "2"; "@type" = "piggyDash"; turnAngle = "-90"; width = "90.0"; } ``` that is a part of a JSON object I got using ``` [NSJSONSerialization JSONObjectWithData: options: error:]; ``` I am using following code to extract @type value ``` NSString * robot_type = (NSString*)[robotDesign valueForKey:@"@type"]; ``` but recive following error: Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFDictionary 0x71de9e0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key type.' NOTE: Please note that other objects in dictionary like 'turnAngle' and 'width' are extracted easily using same code given above but with their respective keys.

Original source