【问题标题】:How do i use NSTimer with navigation flow of application?如何在应用程序的导航流程中使用 NSTimer?
【发布时间】:2015-02-10 11:07:52
【问题描述】:

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

那么我该怎么做呢?

提前致谢。

【问题讨论】:

  • 很难(至少对我来说)理解你想要达到的目标。你能详细说明一下吗?
  • 为每个 UIViewController 维护两个独立的计时器要容易得多
  • 实际上我不想为 ViewController2 使用计时器。我只想在 VC1 上使用计时器,但在该 VC1 上的总出现时间每 60 秒使用一次(例如,前 20 秒,然后返回 40 秒 = 60 秒)。

标签: ios timer nstimer nstimeinterval


【解决方案1】:

如果您想在多个实例中使用一个项目,请尝试使用单例设计模式。但看起来,你永远不会从 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];
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,是的,这是一种方法。但是我不想使用 AppDelegate,有没有办法通过导航暂停和恢复计时器?
    • 我想说最好的做法可能是有一个自定义的UINavigationController 来控制 NSTimer 和推送/弹出。另一种解决方案可能是将 NSTimer 通过- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 传递,但这似乎真的很糟糕。
    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多