在包含@字符的键的NSDictionary中获取valueForKey时出错

我试图在下面的名为“robotDesign”的NSDictionary中获取“@type”键的值

robotDesign : { "@id" = "2"; "@type" = "piggyDash"; turnAngle = "-90"; width = "90.0"; } 

这是我使用的JSON对象的一部分

 [NSJSONSerialization JSONObjectWithData: options: error:]; 

我正在使用以下代码来提取@type值

 NSString * robot_type = (NSString*)[robotDesign valueForKey:@"@type"]; 

但收到以下错误:

由于未捕获的exception'NSUnknownKeyException',原因:'[<__ NSCFDictionary 0x71de9e0> valueForUndefinedKey:]终止应用程序:该类不是密钥types的密钥值编码兼容。

注意:请注意像'turnAngle'和'width'这样的字典中的其他对象可以使用上面给出的相同的代码,但是使用它们各自的键很容易地提取出来。

尝试

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

或删除领先的@

从文档:

valueForKey:
返回与给定键相关的值。

- (id)valueForKey:(NSString *)key
参数 key返回相应值的键。 请注意,使用键值编码时,键必须是string(请参阅“键值编码基础知识”)。

返回值
与键关联的值。

讨论如果键不以“@”开始,则调用objectForKey :. 如果键以“@”开始,则剥去“@”并用其余键调用[super valueForKey:]。

@导致调用NSDictionary超类的valueForKey:的实现。 但NSObject不知道关键的type

这是完美的logging行为。 从NSDictionary的类参考:

NSDictionary覆盖“valueForKey:”方法。 如果密钥以“@”字符开头,则调用super,否则调用objectForKey:

所以,除非你有一个合理的理由不这样做,你应该使用- objectForKey: