想在iOS sdk中反转BOOL值

时间:2012-06-04 06:33:00

标签: ios boolean

我在iOS sdk中从plist获取id值,如果我获得值0,那么我必须将其显示为1,反之亦然。

这是我的相同代码

+(BOOL) removeButton {
   id obj = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"ABC"];
   if (obj != Nil) {
      return (BOOL)obj;
  }
    return YES;
 }

但问题是,当id的值为0时,它将返回No,反之亦然。但我想把我的条件放在相反的事情上,比如假设id的值为0,那么我必须显示返回YES,反之亦然。

3 个答案:

答案 0 :(得分:7)

您无法将id投射到BOOL。假设它被正确存储,你从字典中获取它的方式是通过数字包装器NSNumber

NSNumber *boolWrapper = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"ABC"];
return ![boolWrapper boolValue];

这将返回0表示1,1表示0表示。

如果您只是按照自己的方式进行投射,除非对象不存在(即nil),否则它将始终为真。

答案 1 :(得分:0)

添加“!”如下:)

return !(BOOL)obj;

[编辑]

你应该使用objectForInfoDictionaryKey而不是valueForKey,如下所示:

id object = [[NSBundle mainBundle] objectForInfoDictionaryKey:"Key"];

答案 2 :(得分:0)

好的,就像这样:

+(BOOL) removeButton {
   id obj = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"ABC"];
   BOOL shouldRemoveButton = N0;
   if (obj != nil) {
      shouldRemoveButton = YES;
  }
    return shouldRemoveButton;
 }

我不喜欢在代码中间放置returns,这会让人感到困惑而且不太清楚。