NStimer и для цикла - PullRequest
       22

NStimer и для цикла

0 голосов
/ 20 февраля 2011

Я борюсь с этим. Я видел код, где вы можете сделать это:

- (void)startTimer {
    pauseTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(doActions) userInfo:nil repeats:YES];
} 

Тогда позвоните в doActions.

Проблема в том, что я хочу позвонить, пока нажата кнопка, и выполнить действия - IBaction. Я продолжаю получать sigAbrt.

Может ли кто-нибудь дать мне пример кода, где вы можете менять метку с «вкл» на «выкл» каждую 1 секунду, пока нажата кнопка?

EDIT

Я имею в виду, если doActions выглядит так

- (IBAction) doActions {
for(int j; j<100; j++){

theLabel.hidden != theLabel.hidden;
//Does invalidate timer go here?
}
}

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Мне все еще непонятно, что вы пытаетесь сделать: я бы нашел это намного проще, если бы вы просто написали это на простом английском, в конце концов.

Тем не менее, вот что я думаю приведет вас туда, куда вы хотите пойти:

// Assuming ivars:
// NSTimer* toggleTimer
// NSUInteger toggleCount

- (void)toggleTimerFired:(NSTimer*)timer
{
  if ( toggleCount++ >= 100 ) {
    [self stopToggling:self];
    return;
  }
  // do whatever you need to do a hundred times here
}

- (IBAction)stopToggling:(id)sender
{
  [toggleTimer invalidate], toggleTimer = nil;  // you don't want dangling pointers...
  // perform any other needed house-keeping here
}

- (IBAction)startToggling:(id)sender
{
  [self stopToggling:self]; // if `startToggling:` will NEVER be called when a timer exists, this line CAN be omitted.
  toggleCount = 0;
  toggleTimer = [NSTimer scheduledTimerWithTimeInterval:1. target:self selector:@selector(toggleTimerFired:) userInfo:nil repeats:YES];
}

В зависимости от того, что точно вы хотите сделать,startToggling: необходимо отправить на touchUpInside или touchDown.Во втором случае stopToggling:, вероятно, необходимо вызывать при любом событии touchUp... кнопки.

0 голосов
/ 20 февраля 2011
- (void)startTimer {
    pauseTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(doActions) userInfo:nil repeats:YES];
} 

- (void) doActions {
theLabel.hidden != theLabel.hidden;
}
...