1

我正在遍历NSArrayof NSDictionaries,然后我想使用if 语句NSDictionary类型中的其中一个值BOOL。但是我在执行此操作时遇到了一些麻烦。

这就是我的for loop样子

for(NSDictionary *dict in arrayOfDictionaries)
    {
        NSNumber *boolCheck = [dict objectForKey:@"ISREADY"]; // isReady is the bool value which is either 0 or 1

        if (boolCheck == [NSNumber numberWithBool:YES]) {

//...
   }
}

正在发生的事情是它循环通过我的数组,但从未满足我的 if 语句的条件,即使我 100% 确定数组中有这种类型的值......而且其中有很多。

任何帮助,将不胜感激。

4

2 回答 2

7

假设 NSNumber 包含一个 BOOL,请尝试

if ([boolCheck boolValue]) {
    ....
}
于 2013-05-01T01:11:42.253 回答
1

来自@Jim Tierney 在这里回答:JSON to NSDictionary - How to check the boolean type,一种更精细的方法:

    - (BOOL)isBooleanKey:(id)key
{
    if ([key isKindOfClass:[NSNumber class]]) {
        if([key isEqual:[NSNumber numberWithBool:YES]]
           || [key isEqual:[NSNumber numberWithBool:NO]]){
            /* is a bool value if
             <key>somekey</key>
             <true/> or <false/> ie 1 or 0 but not -1, 2, 3 or 1,8
             */
            NSNumber *n = key;
            if (n.intValue) {
                if (n.intValue >= 0 && n.intValue <= 1) return YES;
            }
        }
    }
    // key is not a boolean
    return NO;
}

像这样调用:

if ([self isBooleanKey:[myDict objectForKey:@"some key"]]) {
    // is a bool object for key :-)
}

当同一个键可以采用不同的类(NSData、NSString 等)时,我遇到了问题,因此 boolValue 可能会生成异常并失败!上面的代码为我解决了

于 2015-07-21T09:01:04.920 回答