进入后台时无效NSTimer

时间:2010-12-15 15:26:29

标签: iphone timer background nstimer invalidation

当我的应用程序进入后台时,我正在尝试使计时器无效。当您点击启动计时器并位于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 *)应用程序委托的应用程序方法。但这不会起作用,因为它在代表中未声明。我想通过将TimerController.h包含在委托中,这可行,但不会。

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

2 个答案:

答案 0 :(得分:11)

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

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

// and later:
- (void) goBackground {
    [timer invalidate], timer = nil;
}

答案 1 :(得分:0)

if (timer) {
        [timer invalidate];
        timer = nil;
    }
applicationReEnteredForeground中的

通知方法也可以正常工作