Objective c BOOL设置为“否”,但检查成功==是

Objective c BOOL设置为“否”,但检查成功==是,objective-c,ios,Objective C,Ios,h m 这是我在那门课上所有与布尔有关的代码 它总是打印“是” 我不明白的是什么?我希望它总是打印NO 编辑 使用Xcode搜索“dontSendDelegate” 它只出现在我展示的代码中。这就是复制和粘贴 将其更改为int并指定0而不是“NO”,并进行比较==1而不是==YES,结果与您预期的一样。但我还是不明白布尔为什么不工作 感谢大家对这个问题的帮助和讨论。当您将表达式的可变部分(bool实例变量)放在比较运算符(如==)之前时,有时您会出现一个拼写错误,您将其改为write=,因此您设

h

m

这是我在那门课上所有与布尔有关的代码

它总是打印“是”

我不明白的是什么?我希望它总是打印NO

编辑

使用Xcode搜索“dontSendDelegate”

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

将其更改为int并指定0而不是“NO”,并进行比较==1而不是==YES,结果与您预期的一样。但我还是不明白布尔为什么不工作


感谢大家对这个问题的帮助和讨论。

当您将表达式的可变部分(bool实例变量)放在比较运算符(如==)之前时,有时您会出现一个拼写错误,您将其改为write=,因此您设置了变量而不是比较它。查找此类型的错误

或者始终将不可变值放在第一位,这样您就可以在目前为止提供的代码中编写

@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");
}
这样,如果您输入一个等号而不是两个,编译器会抱怨


根据测试布尔变量时的注释,您根本不需要使用==。只需使用if self.dontSendDelegate或if!self.dontSendDelegate.

@GeorgFritzsche是正确的。发生这种情况时,我重写setter并创建一个断点。然后查看屏幕左侧的堆栈,并将其追踪到罪犯。很可能您正在更改程序中其他地方的值。

看起来它是同时更改的。您可以自己实现setter,并在调用时检查它是否为YES。是否存在一些错误的内存管理,通过这些管理您可以覆盖BOOL dontSendDelegate?多线程问题?尝试在ivar前面加上volatile关键字。否则,您需要共享更多代码。@mvds:内存管理?如果属性为nil,它将记录nil或0 NO。但是你不能像BOOL那样释放静态类型,所以OP完全是在其他地方设置他的属性。注意BOOL属性设置为NO,但是实例变量有未定义的行为。所以你不需要显式地设置为NO。@Aram:ivars被初始化为零,即BOOL ivars为NO。就我所见,Xcode也会以同样的方式抱怨,但我认为这会很方便。因为它是一个布尔值,你可以编写if self.dontSendDelegate。
@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");
}
if (YES == self.dontSendDelegate)