【问题标题】:How to check bool value from an array of NSDictionary如何从 NSDictionary 数组中检查布尔值
【发布时间】:2013-04-25 01:11:43
【问题描述】:

我正在循环通过NSDictionariesNSArray,然后我想使用NSDictionary 中的一个值,它是BOOL 类型的if 语句.. 但我遇到了一些麻烦这样做。

这就是我的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% 确定数组中存在这种类型的值......而且其中有很多。

任何帮助将不胜感激。

【问题讨论】:

  • 您正试图按地址比较两个对象。这将告诉您这两个对象是否是相同的对象,但如果它们具有相同的 VALUE 则不会。您可以将两个 NSNumber 对象与isEqualToNumber: 进行比较,但是像 Tom 建议的那样提取和测试值是更好的方法。

标签: ios objective-c nsarray boolean nsdictionary


【解决方案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 可能会生成异常并失败! 上面的代码为我解决了

【讨论】:

  • 此解决方案不区分插入为 YES (BOOL) 的值与插入为 1(数字)的值。
  • 嗨@rsc,这段代码很旧,只检查数值。为了确保是一个真正的布尔值,您必须使用 PropertyListSerialization 重新创建一个 xml plist(键是对象)并检查是否包含“”或“”。 xml rapresentation 只是一个字符串,很简单。为此,第一个更改是将方法更改为 - (BOOL)isBooleanKey:(NSNumber *)obj 以避免解析完整的 plist(即,只是您感兴趣的键的对象)。
【解决方案2】:

假设 NSNumber 包含一个 BOOL,试试

if ([boolCheck boolValue]) {
    ....
}

【讨论】:

  • 所以我运行它并进入 if 语句,当我记录 boolcheck 时,它只返回 "ISREADY == 1 的字典
  • @HurkNburkS - 我想这就是你想要的。
  • 是的..大声笑我认为这只是检查它是否是一个布尔值,我不知道它是如何返回的,只有当它为真时。即使在阅读文档后我仍然不知道 LOL
  • @HurkNburkS - 是的,它正在测试布尔 TRUE 值。 [boolCheck boolValue] 函数返回 bool 值,然后 if 测试该 bool 值。如果需要,可以将函数调用的结果分配给 BOOL 并在单独的语句中对其进行测试。
  • @HurkNburkS - 请记住,bool 可以与仅取值 0 或 1 的 int 互换。您可以轻松地使用[boolCheck intValue] 来获取整数值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 2011-01-24
  • 2012-10-15
  • 1970-01-01
相关资源
最近更新 更多