0

我正在尝试将 CGFloat 与整数值进行比较。基于这个值,执行一个有条件的......非常标准。但是,出于某种原因,这将始终是正确的。我什至打印出这些值,它们显然小于 800....纯粹基于它的二进制值,所以我尝试了这个有风险的小演员操作......有什么想法吗?

CGPoint textViewPoint = [scroller convertPoint:[textView center] toView:(UIView *)self.view];
        NSLog(@"the y coord is %f", textViewPoint.y);

    int size = (int)textViewPoint.y;
    NSLog(@"the yint %d", size);
    //move the main view, so that the keyboard does not hide it.
    //if  (self.scroller.frame.origin.y >= 0 && textViewPoint.y > 800.0);
    if(size > 800);
    {
        NSLog(@"moving up");
4

1 回答 1

4

问题在于行;if(size > 800);,而不是 int 与 float 的比较。删除它,一切都应该没问题。

这是因为这个分号被解释为你的if语句的主体,这就是当条件为真时执行的这个 NO-OP 语句。然后,该if空主体旁边的其​​余代码位于主体之外,if因此无论条件值如何都将执行。这就像你写的那样:

if(size > 800)
{
}
{
    NSLog(@"moving up");
}

编译器警告提示

编译器通常会警告您此错误。确保在您的项目构建设置(编译器标志)中激活了“空循环体”警告-Wempty-body:这样下次您犯此错误时,您将收到有关它的警告,并且会知道什么是错误的以及如何修复它。

于 2012-10-13T00:51:57.157 回答