2013-05-01 88 views
1

我通过NSArrayNSDictionaries循环,然后我想要使用NSDictionary这是BOOL类型的值中的一个if语句..但我有做这件事有些麻烦。如何检查布尔值从一个NSDictionary数组

这是我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%阵列......和其他很多事情。

任何帮助,将不胜感激。

+0

您试图通过地址比较两个对象。这将告诉你两个对象是否是SAME对象,但不是如果它们具有相同的VALUE值。你可以比较两个NSNumber对象与'isEqualToNumber:',但是提取和测试像Tom所建议的值是更好的方法。 – 2013-05-01 01:19:05

回答

7

假设的NSNumber包含BOOL,尝试

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

所以我跑了,它进入if语句,当我登录boolcheck时,它只返回字典,其中“ISREADY == 1 – HurkNburkS 2013-05-01 01:18:55

+0

@HurkNburkS - 我会假设这就是你想要的 – 2013-05-01 01:20:19

+0

yup ..大声笑我认为这只是检查看看这是不是一个布尔我不知道它是如何返回,只有如果是真的。即使阅读文档,我仍然不知道LOL – HurkNburkS 2013-05-01 01:26:11

0

从@Jim蒂尔尼回答这里: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可能会产生异常并失败! 上面的代码为我解决了

+0

code sobubstituted w ith方法.. – Mike97 2015-07-21 10:06:12

+0

此解决方案不区分插入为YES(BOOL)的值与插入为1(数字)的值。 – rsc 2017-12-31 05:26:36

+0

嗨@rsc,这个代码是旧的,只检查数值。为了确保是一个真正的布尔值,你必须使用PropertyListSerialization(键是对象)重新创建一个xml plist,并检查containts“”或“”。 xml rapresentation只是一个字符串,很简单。要做到这一点,第一个变化是将方法更改为 - (BOOL)isBooleanKey:(NSNumber *)obj以避免解析完整的plist(即,只是您感兴趣的键的对象)。 – Mike97 2017-12-31 12:14:00