如何将 NSTimer 与应用程序的导航流程一起使用?

How do i use NSTimer with navigation flow of application?

我想用多个 UIViewController 维护计时器。 比如,我在 ViewController1 中创建一个计时器,间隔为 60 秒。 20 秒后,应用程序导航到 ViewController2。(因此还剩下 40 秒来执行计时器)。 停留20秒后回到ViewController1,此时定时器应该在返回40秒后执行,然后在60秒后执行。

那我该怎么做呢?

提前致谢。

虽然这可能是一个具有更好实践的解决方案,但您可以在 AppDelegate 中设置 NSTimer 并使 AppDelegate 管理 segues 以推送或弹出您的 UIViewControllers

如果您想在多个实例中使用一个项目,请尝试使用单例设计模式。但就像看起来一样,您永远不会从 VC1 导航回来,所以所有对象仍然存在。

How to Pause/Play NSTimer?的基础上,您可以更改一些部分以使其适合您的情况。

- (void)stopTimer
{
    if( timer )
    {
        [timer invalidate];
        [timer release]; // if not ARC
        timer = nil;
    }
}

- (void)startTimer
{
    [self stopTimer];
    int interval = 1.;
    timer = [[NSTimer scheduledTimerWithTimeInterval:interval
                                              target:self
                                            selector:@selector(countUp)
                                            userInfo:nil repeats:YES] retain]; // retain if not ARC
}

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self timerStart];
}

-(void)viewWillDisappear:(BOOL)animated
{
    [self stopTimer];
    [super viewWillDisappear:animated];
}

-(void)countUp
{
    if(timePassed++ >= 60)  // defined in header
    {
        timePassed=0;
        [self myCustomEvent];
    }
}