BOOL对于目标c中的值0返回YES?

时间:2019-12-13 05:18:52

标签: ios objective-c xcode

我的模型中有Invisible = 0,我正在尝试使用此行在BOOL中获得它。

BOOL invisible = [self.model objectForKey:@"Invisible"];

但不可见是YES而不是NO。我也尝试过bool,但这也是事实。我使用[[self.model objectForKey:@"Invisible"] class]检查了对象的类,它显示了_NSCFBoolean。怎么了模型是NSDictionary。

enter image description here

更新

好的,所以我找到了真正的问题。我有Filter类,其中getter isInvisible和代码为

- (BOOL)isInvisible {
     return [[self.model objectForKey:@"Invisible"] boolValue]; 
   }

当我第一次打电话给我时,它返回NO。哪个好现在,紧接着我再次调用它,它返回。奇怪。

(lldb) po filter.isInvisible 
NO 
(lldb) po filter.isInvisible 
<nil>

两个po命令之间只有1秒的差异。

2 个答案:

答案 0 :(得分:3)

= [self.model objectForKey:@"Invisible"];

这将返回一个NSNumber对象。如果您想要BOOL原语,可以通过boolValue方法获取它,

= [[self.model objectForKey:@"Invisible"] boolValue];

答案 1 :(得分:0)

由于您从BOOL方法返回了isInvisible值,因此我相信nil等于0。所以0等于NOfalse。因此filter.isInvisible应该是NOfalse

请仅在代码中的if语句中进行验证。

示例:

if (filter.isInvisible == NO){//Should be reached here}