ブール論理に奇妙な問題があります。私は何か愚かなことをする必要がありますが、私はそれを理解することはできません。 次のコードでは、firstMeasure.isInvisibleAreaがtrueで、measureBuffer1がnilです。 何らかの理由でtest1がNOに評価されても、まだif文にドロップされています。 コメントアウトされた行を使用すると問題なく動作します。 これはなぜ起こりますか?ブール論理エラー
BOOL firstVisible = firstMeasure.isInVisibleArea;
BOOL notFirstVisible = !(firstMeasure.isInVisibleArea);
BOOL measureBufferNil = measureBuffer1 == nil;
BOOL test1 = measureBuffer1 == nil && !firstMeasure.isInVisibleArea;
BOOL test2 = measureBufferNil && !firstVisible;
if (measureBuffer1 == nil && !firstMeasure.isInVisibleArea)
//if (measureBufferNil && !firstVisible)
{
//do some action
}
更新1:!
私は完全にmeasureBufferビットで撮影したように私はfirstMeasure.isInVisibleAreaに問題を単離しました。 isInVisible領域は小さな計算ですが(何も変更されません)、計算はself.view.frameを使用しています。私は同様にこれを式から取り除き、何が起こるか見る。私の感想は、self.view.frameがisInVisibleAreaへの2回の呼び出しの間で変化していることです。
更新2: これは実際問題です。あなたが言うようにtest1のは、if文にtest1のをドロップし、NOに評価されている場合は、私は
私は「そのコードはまったく同じ動作するはず」と言うとき、私は皆のために話すと思います。たぶんどこかの比較の中で等号を忘れていない限り。 Xcodeでシングルステップ実行しようとしましたか? –
はい私は持っています。私にとっても意味がありません。 – Ian1971
私はmeasureBuffer1ビットなしで試したので、firstMeasure.isInVisible領域に関連している必要があることを発見しました。私は質問 – Ian1971