2

私は経験豊富なプログラマーなので、この不可解な振る舞いは私にとって完全な謎です。

正確に2つのブール変数がである場合にのみ入力する必要がある単純なifステートメントがあります。ただし、-ステートメントは、そのうちの1つだけがである場合に何らかの理由で入力されます。falseiffalse

私のコードは次のようになります。

BOOL connected = [self connected];

NSLog(@"Connected to the internet: %@", connected ? @"YES" : @"NO");

BOOL notConnectedMessageShown = ((FOLDAppDelegate *)[[UIApplication sharedApplication] delegate]).notConnectedMessageShown;

NSLog(@"notConnectedMessageShown: %@", notConnectedMessageShown ? @"YES" : @"NO");

if (!connected && !notConnectedMessageShown);
{
    NSLog(@"Entering if statement");
}

そして、NSLog次のように印刷します。

"Connected to the internet: YES"
"notConnectedMessageShown: NO"
"Entering if statement"

本当にわかりません。最初の変数はそもそもあるので、プログラミングスキルに応じてステートメントtrue全体をスキップする必要がありますか?if

誰かがここで何が起こっているのか考えていますか?

4

1 に答える 1

7

末尾にセミコロンがありますif

if (!connected && !notConnectedMessageShown);  <<--- this ; is wrong

このように、「真の」条件のブロックは単に空であり、コードは常にその直後にブロックに入ります。

これである必要があります:

if (!connected && !notConnectedMessageShown)  <<-- see here
{
   NSLog(@"Entering if statement");
}
于 2012-07-28T11:17:45.563 に答える