0

ifステートメントで、メソッドが実行されているかどうかを確認するにはどうすればよいですか?例えば-

if ([(UIButton *)sender isEqual:blueButton] && **showBlueText method is running** )
{
    Keep playing.
}
else if ([(UIButton *)sender isEqual:blueButton] && **showBlueText method is NOT running** )
{
    Game over.
}

-(void)showBlueText
{
blueText.hidden = NO;
[self performSelector:@selector(hideText) withObject:nil afterDelay:textDelay];
[self performSelector:@selector(showGreenText) withObject:nil afterDelay:hideDelay];
}

明確にするために、「showBlueText」は、このifステートメントとは独立して実行される独自のループの一部です。showBlueTextが現在実行されているかどうかを確認しようとしています。

4

3 に答える 3

0

Keep playingorステートメントGame overを置き換えることをお勧めしDoing stuffます。NSLog()予期しない結果が得られた場合に、プログラムの変更を追跡するために常に使用します。

したがって、ステートメントは次のようになります。

NSLog(@"Keep playing");

これが役立つことを願っています。

于 2012-11-20T22:20:52.927 に答える
0

テキストが非表示になっているかどうかを確認してください。コントローラーに並列状態を保存する必要はありません。同期が取れなくなる可能性が生じるだけです。

于 2012-11-21T05:31:42.060 に答える
0

ここに状態を記録します。このクラスに新しいインスタンス変数を作成します。

// new iVar
BOOL textIsShowing;

// method
-(void)showBlueText {
  textIsShowing = YES;
  blueText.hidden = NO;
  [self performSelector:@selector(hideText) withObject:nil afterDelay:textDelay];
}

// method
- (void)hideText {
  textIsShowing = NO;
  blueText.hidden = YES;
}

// button press
- (void)buttonPressed {
  if (textIsShowing) {
    NSLog(@"Keep playing");
  } else {
    NSLog(@"Game over");
  }
}

このメソッドを呼び出してからアニメーションが停止するまでの間は、「実行中」とは考えないでください。後で実行されるコードをスケジュールします。代わりに、最終的に実行された後に通知を受け取る必要があります。

この場合、自分で状態を追跡するのが最も簡単です。新しい変数を使用して物事の状態を追跡し、その状態が変化したときにその値を変更します。


しかし、あなたはただチェックすることはできませんif (blueText.hidden)か?ええ、できます。しかし、ランダムで重要でないオブジェクトのあいまいなプロパティにプログラムに関する状態を保存するのは悪い習慣です。

あなたの状態を調べて、あなたが何を示しているかを理解してください。あなたの状態を把握するために何が表示されているかを調べないでください。

于 2012-11-20T22:30:30.273 に答える