我在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,反之亦然。
答案 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
,这会让人感到困惑而且不太清楚。