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

Posted

技术标签:

【中文标题】如果某个动作正在运行,如何设置 NSTimer 停止?【英文标题】:How do I set a NSTimer to stop if a certain action is running? 【发布时间】:2016-07-18 17:34:10 【问题描述】:

感谢我的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

【问题讨论】:

iPhone SDK: check if a UIAlertView is showing的可能重复 【参考方案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];
    

希望这会有所帮助! :)

【讨论】:

以上是关于如果某个动作正在运行,如何设置 NSTimer 停止?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何让 NSTimer 在 iOS 中为我​​的音频播放器在后台运行

如何暂停/播放 NSTimer?

如何让我的应用在后台运行 NSTimer?

如何在 Cocoa 中运行 NSTimer 直到标志变量 ON

如何使用 NSTimer 在特定时间执行操作?

如何用另一个 NSTimer 停止 NSTimer?