访问字典对象时出错

时间:2015-12-30 12:50:42

标签: ios objective-c nsdictionary

我有NSDictionary *输入,有2个键/值对

[0]="@id":@"random"
[1]="@val":@"100"

当我编写以下代码时,这些是我NSDictionary的内容

for(NSDictionary *inputVal in input)

if(inputVal[@"id"] == field)

我的变量字段是NSString并且包含随机数,我收到错误

[__NSCFString objectForKeyedSubscript:]: unrecognized selector sent to instance

我知道这个错误意味着我正在对字符串对象进行字典操作,即我期待一个字典对象但是有一个字符串

但我的问题是我确实只有NSDictionary个对象

2 个答案:

答案 0 :(得分:1)

for(NSDictionary *inputVal in input)迭代所有键。

所以你应该使用:

for(NSDictionary *key in input){
    if(input[key] == field){ // notice: used input dictionary here.
     ....
    }
 }

此外,您无需迭代从键中查找值,如果使用键,则可以直接获取:

if (input[@"id"] == field) {
   ...
}

执行上述操作后,您将该值与带有==的字符串进行比较,如果您确定需要比较两者的地址,那么就可以了。否则,您需要使用isEqualToString:

答案 1 :(得分:1)

NSDictionary进行迭代不会为您提供词典,它会迭代NSString个键:

for (NSString *inputKey in input) { //first value will be "id", second will be "val"
   if ([inputKey isEqual:@"id"] && [input[inputKey] isEqual:field]) {
   }
}

您可能甚至不需要迭代:

if ([input[@"id"] isEqual:field]) {
   //do something
}

另请注意Anoop Vaidya's answer及其对==isEquals:的评论。