Как я могу отменить NSTimer во время его работы? (Цель C) - PullRequest
0 голосов
/ 04 августа 2020

извините, если мой вопрос действительно прост. Я новичок в цели c и не смог заставить ее работать ни одним из методов, которые я видел в Интернете.

По сути, у меня есть очень простое приложение таймера с NSTimer. У меня настроена кнопка отмены, но я не знаю, как заставить ее работать.

Вот мой код для таймера. Он запускается, когда пользователь нажимает кнопку запуска (не показана).

    -(void) timerFunction{
    NSString *timerSeconds = _timerSecondsField.text;
    NSString *doubleconversion = timerSeconds;
    double  timersecondsval = [doubleconversion doubleValue];
    self.cancelVisibility.hidden = NO; 
    self.timerSecondsField.hidden = YES; 
    self.restartTimerVisibility.hidden = YES;
    self.timerStatus.hidden= NO;
    self.timerStatus.text = (@"Timer Running");
       
    [NSTimer scheduledTimerWithTimeInterval:timersecondsval target:self selector:@selector(timerStatusUpdater) userInfo: nil repeats:NO];
    

}

По сути, я хочу, чтобы кнопка отмены останавливала таймер и сбрасывала представление. Я попытался использовать операторы if, чтобы изменить "timersecondsval" на 0 и заставить "timerStatusUpdater" вызывать функцию сброса моего представления вместо вызова функции, которая воспроизводит звуковой сигнал, но изменение времени не сработало, поэтому мне пришлось подождать пока таймер не закончится, чтобы сбросить вид. (и сброс представления разбил мое приложение).

Вот код для сброса представления:

-(void) newView{
    self.cancelVisibility.hidden = YES;
    self.timerStatus.hidden = YES;
    self.restartTimerVisibility.hidden = YES;
    self.timerSecondsField.hidden = NO;
    
}

Я также пытался использовать функцию отмены, подобную этой, для вызова нового NSTimer, но это не отменяет предыдущую функцию. Вот код для этого:

- (IBAction)cancelPressed:(id)sender {
    
     [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(newView) userInfo: nil repeats:NO];
    
    
}

Так есть ли функция, которую я могу просто добавить, чтобы отменить предыдущий NSTimer, чтобы моя кнопка отмены работала?

Спасибо!

1 Ответ

0 голосов
/ 04 августа 2020

Вам нужно что-то вроде

self.timer = [NSTimer scheduledTimerWithTimeInterval:timersecondsval ...

для запуска и для отмены вам нужно

self.timer.invalidate;

EDIT

На основе комментария - помните вам нужно объявить ivar для этого таймера в вашем интерфейсе, например

@interface MyClass ()

@property (nonatomic,strong) NSTimer * timer; // My timer

@end

, который вы можете разместить либо в заголовке, либо в файле класса, в зависимости от того, хотите ли вы, чтобы он был доступен другим классам. также.

Также обратите внимание, что с AR C вы обычно объявляете его как strong.

...