·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没有工作。
感谢您对该问题的所有帮助和讨论。
答案 0 :(得分:0)
当你将一个表达式的可变部分(你的bool实例变量)放在一个比较运算符(如==)之前时,有时候你会写一个拼写错误,所以你设置变量而不是比较它。寻找这种类型的错误。
或者始终将不可变值放在第一位,因此在您提供的代码中,您将改为编写
if (YES == self.dontSendDelegate)
这样,如果您输入一个等号而不是两个,编译器会抱怨。
(来自评论)测试布尔变量时,根本不需要使用==。只需使用if (self.dontSendDelegate)
或if (!self.dontSendDelegate)
。
答案 1 :(得分:0)
@GeorgFritzsche是对的。发生这种情况时,我会覆盖setter并创建一个断点。然后看一下屏幕左侧的堆栈,并将其追溯到罪魁祸首。您很可能正在更改程序中其他位置的值。