2010-12-15 38 views
2

我试图在我的应用进入后台时使计时器无效。当您点击一个启动计时器的按钮并在TimerController.m文件中时,计时器会被调用。这是如何被调用的。现在在进入后台时使NSTimer无效

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无效]。 进入 - (void)applicationDidEnterBackground:(UIApplication *)应用程序方法的应用程序委托。但是由于它在代表中未声明,所以这不起作用。我认为通过将TimerController.h纳入委托,这将工作,但它不会。

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

回答

11

还有一个UIApplicationDidEnterBackgroundNotification通知当应用程序进入后台时发布。您可以认购您的控制器此通知和处理存在的过渡:

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

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

Great..that works..thanks – Allen 2010-12-15 16:35:50

0
if (timer) { 
     [timer invalidate]; 
     timer = nil; 
    } 
在applicationReEnteredForeground通知方法

还将努力