2

当我的应用程序进入后台时,我试图使计时器无效。当您点击启动计时器并且位于 TimerController.m 文件中的按钮时,将调用计时器。这是它被调用的方式。

    mytimer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];//Timer with interval of one second
    [[NSRunLoop mainRunLoop] addTimer:mytimer forMode:NSDefaultRunLoopMode];

现在,我想在应用程序进入后台时使 mytimer 无效,所以我尝试将 [mytimer invalidate]; 进入应用程序委托的 - (void)applicationDidEnterBackground:(UIApplication *)application 方法。但这不起作用,因为它没有在委托中声明。我认为通过将 TimerController.h 包含到委托中,这会起作用,但不会。

所以,我显然不知道我在这里做什么。你能帮我吗?当应用程序进入后台时,它是如何让 mytimer 失效的?

4

2 回答 2

11

UIApplicationDidEnterBackgroundNotification当应用程序进入后台时,还会发布一条通知。您可以在控制器中订阅此通知并在那里处理转换:

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(goBackground)
    name:UIApplicationDidEnterBackgroundNotification
    object:nil];

// and later:
- (void) goBackground {
    [timer invalidate], timer = nil;
}
于 2010-12-15T16:09:15.140 回答
0
if (timer) {
        [timer invalidate];
        timer = nil;
    }

在 applicationReEnteredForeground 通知方法也将起作用

于 2015-02-19T11:07:53.657 回答