如果某个动作正在运行,如何设置 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 中为我的音频播放器在后台运行