2

我从 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 那么我必须显示 return YES ,反之亦然。

4

3 回答 3

7

你不能投射idBOOL. 假设它被正确存储,你从字典中取出它的方法是通过 number wrapper NSNumber

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

这将为 1 返回 0,为 0 返回 1。

如果你只是像你正在做的那样简单地投射它,除非对象不存在(即它是nil),否则它将始终为真。

于 2012-06-04T07:02:09.177 回答
0

添加 ”!” 如下 :)

return !(BOOL)obj;

[编辑]

你应该使用 objectForInfoDictionaryKey this 而不是 valueForKey 如下:

id object = [[NSBundle mainBundle] objectForInfoDictionaryKey:"Key"];
于 2012-06-04T06:43:34.963 回答
0

好的,像这样:

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

我不喜欢returns在代码中间有,这会让人困惑而且不是很清楚。

于 2012-06-04T06:43:55.463 回答