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

問題は、int と float の比較ではなく、行末にあります;if(size > 800);それを削除すると、すべて問題ありません。

これは、このセミコロンがifステートメントの本文として解釈され、条件が真の場合に実行される NO-OP ステートメントであるためです。次に、このif空の本文の横にある残りのコードは本文の外側にあるifため、条件値に関係なく実行されます。それはまさにあなたが書いたかのようです:

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

コンパイラの警告のヒント

通常、コンパイラはこの間違いについて警告します。プロジェクトのビルド設定 (コンパイラ フラグ) で「空のループ本体」警告が有効になっていることを確認してください-Wempty-body。これにより、次にこの間違いを犯したときに警告が表示され、何が問題で、どのように修正するかがわかります。それ。

于 2012-10-13T00:51:57.157 に答える