BOOL设置为“NO”但成功进行检查== YES

时间:2012-02-19 23:19:51

标签: objective-c ios

·H

@property (nonatomic,assign) BOOL dontSendDelegate;

的.m

@synthesize dontSendDelegate;

- (id) initWithSession:(AVCaptureSession *)aSession outputFileURL:(NSURL 
*)anOutputFileURL
{
    self = [super init];
    if (self != nil) 
    {
        self.dontSendDelegate = NO;
    }
return self;
}


if (self.dontSendDelegate == YES)
{
    NSLog(@"YES");
}
else
{
    NSLog(@"NO");
}

该类中与BOOL相关的所有代码。

始终打印YES。

我不理解的是什么?我希望它始终打印NO。

修改

使用Xcode搜索'dontSendDelegate'

它只出现在我展示的代码中。这是复制和粘贴。

将其更改为int并指定0而不是'NO'并进行比较== 1而不是== YES并且它按预期工作。但我仍然迷失为什么BOOL没有工作。

感谢您对该问题的所有帮助和讨论。

2 个答案:

答案 0 :(得分:0)

当你将一个表达式的可变部分(你的bool实例变量)放在一个比较运算符(如==)之前时,有时候你会写一个拼写错误,所以你设置变量而不是比较它。寻找这种类型的错误。

或者始终将不可变值放在第一位,因此在您提供的代码中,您将改为编写

if (YES == self.dontSendDelegate)

这样,如果您输入一个等号而不是两个,编译器会抱怨。

(来自评论)测试布尔变量时,根本不需要使用==。只需使用if (self.dontSendDelegate)if (!self.dontSendDelegate)

答案 1 :(得分:0)

@GeorgFritzsche是对的。发生这种情况时,我会覆盖setter并创建一个断点。然后看一下屏幕左侧的堆栈,并将其追溯到罪魁祸首。您很可能正在更改程序中其他位置的值。