如果某个操作正在运行,如何设置NSTimer停止?

时间:2016-07-18 17:34:11

标签: objective-c nstimer

我在自定义视图控制器中有一个弹出窗口,由于我的NSTimer而在1分钟后显示。

我的NSTimer代码:

[NSTimer scheduledTimerWithTimeInterval:60.0f
                                 target:self selector:@selector(methodB:) userInfo:nil repeats:YES];`

显示弹出窗口的方法

- (void) methodB:(NSTimer *)timer
{
    //Do calculations.
    [self showPopupWithStyle:CNPPopupStyleFullscreen];
}

如果NSTimer当前处于打开,正在运行或处于活动状态,我试图将[self showPopupWithStyle:CNPPopupStyleFullscreen];设置为停止运行。

如果弹出视图控制器未打开,正在运行或处于活动状态,我想再次启动NSTimer

非常感谢任何帮助,样品或示例!

我的项目是用Objective-C编写的。

编辑:

我尝试了建议中的答案"可能类似"答案,它似乎不适用于我正在做的事情。如何停止NSTimer

1 个答案:

答案 0 :(得分:1)

这似乎可以解决问题。

@property (nonatomic, strong) CNPPopupController *popupController;
- (void)_timerFired:(NSTimer *)timer;

@end

NSTimer *_timer;

- (void)viewDidLoad {
[super viewDidLoad];

if (!_timer) {
    _timer = [NSTimer scheduledTimerWithTimeInterval:10.0f
                                              target:self
                                            selector:@selector(_timerFired:)
                                            userInfo:nil
                                             repeats:YES];
}


}

- (void)_timerFired:(NSTimer *)timer {

if ([_timer isValid]) {
    [self showPopupWithStyle:CNPPopupStyleFullscreen];
    [_timer invalidate];
}
_timer = nil;
    NSLog(@"ping");
}

如果您想重新启动计时器,只需将此代码添加到您要开始备份的操作中。

if (!_timer) {
        _timer = [NSTimer scheduledTimerWithTimeInterval:10.0f
                                                  target:self
                                                selector:@selector(_timerFired:)
                                                userInfo:nil
                                                 repeats:YES];
    }

希望这有帮助! :)