Ios [\uu NSCFString objectForKey:]:发送到实例的选择器无法识别

Ios [\uu NSCFString objectForKey:]:发送到实例的选择器无法识别,ios,objective-c,json,xcode5,Ios,Objective C,Json,Xcode5,我正在创建一个应用程序,它可以扫描条形码并从web服务中检索信息 我设置了一个以JSON格式返回值的web服务。在JSON中记录所有值时,一切正常。问题在于尝试记录单个值时。应用程序崩溃,我看到: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSCFString objectForKey:]:未识别的选择器发送到实例0x170224f40'* 在做了大量的研究后,我在这里遇到了一些类似于我所遇到的问题的问题。有些人帮了我很大的忙

我正在创建一个应用程序,它可以扫描条形码并从web服务中检索信息

我设置了一个以JSON格式返回值的web服务。在JSON中记录所有值时,一切正常。问题在于尝试记录单个值时。应用程序崩溃,我看到:

  • 由于未捕获的异常“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

在进入for循环之前,
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);