Ios [\uu NSCFString objectForKey:]:发送到实例的选择器无法识别
我正在创建一个应用程序,它可以扫描条形码并从web服务中检索信息 我设置了一个以JSON格式返回值的web服务。在JSON中记录所有值时,一切正常。问题在于尝试记录单个值时。应用程序崩溃,我看到:Ios [\uu NSCFString objectForKey:]:发送到实例的选择器无法识别,ios,objective-c,json,xcode5,Ios,Objective C,Json,Xcode5,我正在创建一个应用程序,它可以扫描条形码并从web服务中检索信息 我设置了一个以JSON格式返回值的web服务。在JSON中记录所有值时,一切正常。问题在于尝试记录单个值时。应用程序崩溃,我看到: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSCFString objectForKey:]:未识别的选择器发送到实例0x170224f40'* 在做了大量的研究后,我在这里遇到了一些类似于我所遇到的问题的问题。有些人帮了我很大的忙
- 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSCFString objectForKey:]:未识别的选择器发送到实例0x170224f40'*
//NSDisctionary
res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError];
for(id key in res) {
id value = [res objectForKey:key];
NSString *keyAsString = (NSString *)key;
NSString *valueAsString = (NSString *)value;
NSLog(@"key: %@", keyAsString);
NSLog(@"value: %@", valueAsString);
}
//NSMutableArray
results = [res objectForKey:@"error"];
//result is a dictionary
for (result in results) {
message = [result objectForKey:@"message"];
NSLog(@"Code Above: %@", message);
}
应用程序在此处的第二个for循环中崩溃:
message = [result objectForKey:@"message"];
这就是我的JSON的样子:
{
"error": {
"code": 1,
"message": "No UPC Code for this scan"
},
"data": null
}
有人能看出我的错误吗?如果你能给我一个正确的暗示,我将不胜感激
非常感谢
//NSMutableArray
results = [res objectForKey:@"error"];
//result is a dictionary
for (result in results) {
message = [result objectForKey:@"message"];
NSLog(@"Code Above: %@", message);
}
当您快速枚举字典时,您正在快速枚举它的键。因此,result
是results
中的一个键。因此[result objectForKey:@“message”]
试图将字符串视为字典
您可能想键入[[results objectForKey:result]objectForKey:@“message”]
。虽然我会把它写成results[result][@“message”]
另外,为什么results
被定义为可变数组?基于JSON,它是一个字典。编译器不能真正知道这一点,因此它相信您它是一个数组,这意味着在编译时检查NSArray
类型是否有objectForKey:
方法<代码>结果应为字典
另见:
- developer.apple.com
result
是results
中的一个键。因此[result objectForKey:@“message”]
试图将字符串视为字典
您可能想键入[[results objectForKey:result]objectForKey:@“message”]
。虽然我会把它写成results[result][@“message”]
另外,为什么results
被定义为可变数组?基于JSON,它是一个字典。编译器不能真正知道这一点,因此它相信您它是一个数组,这意味着在编译时检查NSArray
类型是否有objectForKey:
方法<代码>结果应为字典
另见:
- developer.apple.com
result
是results
中的一个键。因此[result objectForKey:@“message”]
试图将字符串视为字典
您可能想键入[[results objectForKey:result]objectForKey:@“message”]
。虽然我会把它写成results[result][@“message”]
另外,为什么results
被定义为可变数组?基于JSON,它是一个字典。编译器不能真正知道这一点,因此它相信您它是一个数组,这意味着在编译时检查NSArray
类型是否有objectForKey:
方法<代码>结果应为字典
另见:
- developer.apple.com
result
是results
中的一个键。因此[result objectForKey:@“message”]
试图将字符串视为字典
您可能想键入[[results objectForKey:result]objectForKey:@“message”]
。虽然我会把它写成results[result][@“message”]
另外,为什么results
被定义为可变数组?基于JSON,它是一个字典。编译器不能真正知道这一点,因此它相信您它是一个数组,这意味着在编译时检查NSArray
类型是否有objectForKey:
方法<代码>结果应为字典
另见:
- developer.apple.com
res
的值是多少?您的JSON将转换为嵌套的NSCFDictionary(NSDictionary的类集群),因此您将无法将其转换为字符串。如果这不能回答你的问题,我深表歉意。我不太确定你在问什么。对不起,我的意思是在那里放一个断点并检查它-确保你看到的是你期望的数据。然后你需要用objectForKey(它会返回另一个NSDictionary)获取另一个字典,NSLog你的“字典”——其中一个真的是NSString。真的吗?从字面上看,相关部分中的每个链接(除了少数链接)都与此相同……在进入for循环之前,res
的值是多少?您的JSON将转换为嵌套的NSCFDictionary(NSDictionary的类集群),因此您将无法将其转换为字符串。如果这不能回答你的问题,我深表歉意。我不太确定你在问什么。对不起,我的意思是在那里放一个断点并检查它-确保你看到的是你期望的数据。然后你需要用objectForKey(它会返回另一个NSDictionary)获取另一个字典,NSLog你的“字典”——其中一个真的是NSString。真的吗?从字面上看,相关部分中的每个链接(除了少数链接)都与此相同……在进入for循环之前,res
的值是多少?您的JSON将转换为嵌套的NSCFDictionary
results = [res objectForKey:@"error"]; // results is NSDictionary with keys "code" and "message"
message = [results objectForKey:@"message"]; // No UPC Code for this scan
NSLog(@"Code Above: %@", message);