我想获得名为“robotDesign”“@type”重点在以下NSDictionary的值
robotDesign : {
"@id" = "2";
"@type" = "piggyDash";
turnAngle = "-90";
width = "90.0";
}
这是一个JSON对象的一部分,我得到了使用
[NSJSONSerialization JSONObjectWithData: options: error:];
我使用下面的代码来提取@type值
NSString * robot_type = (NSString*)[robotDesign valueForKey:@"@type"];
但recive以下错误:
终止应用程序由于未捕获的异常“NSUnknownKeyException”,原因:“[<__ NSCFDictionary 0x71de9e0> valueForUndefinedKey:]:这个类不是关键值对的密钥类型兼容编码-”
注意:请注意,在字典等容易地使用上述但与它们各自的键给定相同的码,提取“turnAngle”和“宽度”其他对象。
尝试
NSString * robot_type = [robotDesign objectForKey:@"@type"];
或删除领先@
从文档:
valueForKey:
返回与给定键关联的值。
- (id)valueForKey:(NSString *)key
参数 key要返回相应价值的关键。 请注意,使用键 - 值编码时,关键要有一个字符串(参见“键 - 值编码基础”)。
返回值
与键关联的值。
讨论如果键不以“@”开始,调用objectForKey :. 如果项不以“@”开始,去掉了“@”并调用[超级valueForKey:]与键的其余部分。
该@
导致调用执行valueForKey:
NSDictionary中的超类的。 但是NSObject的不知道的关键任何type
。
这是完全记录的行为。 从NSDictionary中的类参考:
的NSDictionary覆盖 'valueForKey:' 方法。 如果以“@”字符的按键启动时,它调用超,否则将调用objectForKey:
所以,除非你有不这样做的正当理由,你应该使用- objectForKey:
文章来源: Error getting valueForKey in an NSDictionary for key containing @ character