sha*_*ooo 6 cocoa-touch objective-c nsdictionary nsstring ios
我试图在以下名为'robotDesign'的NSDictionary中获取"@type"键的值
robotDesign : {
"@id" = "2";
"@type" = "piggyDash";
turnAngle = "-90";
width = "90.0";
}
Run Code Online (Sandbox Code Playgroud)
这是我使用的JSON对象的一部分
[NSJSONSerialization JSONObjectWithData: options: error:];
Run Code Online (Sandbox Code Playgroud)
我使用以下代码来提取@type值
NSString * robot_type = (NSString*)[robotDesign valueForKey:@"@type"];
Run Code Online (Sandbox Code Playgroud)
但是请注意以下错误:
由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[<__ NSCFDictionary 0x71de9e0> valueForUndefinedKey:]:此类不是密钥类型的密钥值编码兼容.
注意:请注意,字典中的其他对象如'turnAngle'和'width'可以使用上面给出的相同代码轻松提取,但使用各自的键.
Vik*_*ica 13
尝试
NSString * robot_type = [robotDesign objectForKey:@"@type"];
Run Code Online (Sandbox Code Playgroud)
或删除前导 @
valueForKey:
返回与给定键关联的值.
- (id)valueForKey:(NSString *)key
参数 key用于返回相应值的键.请注意,使用键值编码时,键必须是字符串(请参阅"键值编码基础").返回值
与键关联的值.讨论如果key不以"@"开头,则调用objectForKey:.如果key以"@"开头,则删除"@"并使用其余键调用[super valueForKey:].
该@引线调用的执行valueForKey:的NSDictionary的超类的.但NSObject对密钥一无所知type.
小智 6
这是完全记录的行为.来自NSDictionary的类参考:
NSDictionary覆盖'valueForKey:'方法.如果键以'@'字符开头,则调用super,否则调用objectForKey:
所以,除非你有正当理由不这样做,否则你应该使用- objectForKey:.