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 playingGame over或。如果我得到意想不到的结果,我总是用它来跟踪程序的变化。Doing stuffNSLog()

所以你的陈述可能看起来像:

NSLog(@"Keep playing");

我希望这有帮助。

于 2012-11-20T22:20:52.927 回答
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 回答
0

只需检查文本是否隐藏。无需在控制器中存储并行状态 - 所做的只是创造它们不同步的可能性。

于 2012-11-21T05:31:42.060 回答