Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error getting valueForKey in an NSDictionary for key containing @ character

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.

like image 319
shaffooo Avatar asked Nov 08 '12 17:11

shaffooo


1 Answers

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.

like image 112
vikingosegundo Avatar answered Sep 21 '22 01:09

vikingosegundo