【问题标题】:How to successfully use a BOOL in Xcode 4.3如何在 Xcode 4.3 中成功使用 BOOL
【发布时间】:2012-08-02 10:39:31
【问题描述】:

我刚刚完成了斯坦福大学使用 AVFoundation 的 iPhone 课程。那节课上,助教让我们制作了一个显示视频的应用程序,然后通过人脸识别将太阳镜戴在脸上。所以我想连接几个开关和滑块来做不同的事情。第一个是改变色调过滤器值的滑块。然后我想切换是否显示太阳镜。但开关不会关闭太阳镜。虽然开关有效。我在属性中声明了一个 BOOL

@property (nonatomic) BOOL sunGlasses;  

我合成了它,然后将开关连接到以下动作

- (IBAction)toggleGlasses:(id)sender 
{
if (_mySwitch.on)
{
    NSLog(@"toggle is on");
    self.sunGlasses = YES;
}else {
    NSLog(@"toggle is off");
    self.sunGlasses = NO;
}
}

然后在-(void) captureOutput的方法下,也就是改变色调的地方,人脸识别被我添加到人脸识别部分

if ((faceFound) && (self.sunGlasses = YES)){
    [self.glasses setHidden:NO];
}else{
    [self.glasses setHidden:YES];
}

过去只是如果 (faceFound) 然后把眼镜藏起来或给他们看。但是,如果您将开关关闭,这不会让眼镜消失。

【问题讨论】:

  • 除了通过赋值检查是否相等(你使用 = 而不是 ==),你不应该检查 BOOL 值是否为 YES。它不是真正的布尔类型,并且可以有很多不同的值(实际上是 256)。你最好把这个语句写成“if (faceFound && self.sunFlasses) {”
  • @Jody Hagins,感谢您的快速回复。你的意思是在右括号后加一个括号吗?我应该检查布尔值为零和一而不是真假吗?再次感谢。
  • 我包含大括号只是因为那是我指示要替换的行,并且它在原始行中。不,不要再次检查布尔值是否有任何显式值。任何非零值将是“真”,0 将是“假”。不幸的是,有很多代码(包括苹果示例代码)明确检查是和否。 NO 还不错,因为 false 只是 0。
  • @JodyHagins,非常感谢您的帮助。我想到了。见下文。再次感谢!!
  • 您甚至不需要 BOOL 属性,只需使用开关之一即可。您只需将您使用的显式 YES/NO(不是您发布的代码)替换为 [self.glasses setHidden:!_mySwitch.on];

标签: ios xcode boolean avfoundation


【解决方案1】:

你可以使用

如果(self.sunGlasses){

}

验证

【讨论】:

  • 你能修正你的代码格式并完成你的句子吗?
【解决方案2】:

你用过:

self.sunGlasses = YES

单个 = 是一个赋值。它设置该属性的值,当在更大的表达式中使用此语句时,它的值为 YES。因此,“if”条件始终为真,并且始终采用显示太阳镜的分支。

使用双等号 == 来测试是否相等。

【讨论】:

  • 感谢您的信息。我还是离开了自己。?因为然后我收到一条警告,上面写着“未使用相等比较结果”。我还在人脸发现部分将 = 更改为 ==。有什么想法吗?非常感谢您花时间帮助新手!
  • 我想通了。我使用了您的 == 建议和 Jody 的 if 建议,一切都按计划进行。我有很多东西要学,但是感谢这个网站上的人,我开始取得一些进展!!!再次感谢。
  • 请看上面,我忘记写你的名字了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多