2011-05-06 13 views
4

我有一个NSTimer,当我的应用程序退出活动状态时停止运行,稍后在应用程序再次变为活动状态时重新启动。我没有意识到的是applicationWillResignActive会在我的应用程序第一次启动时触发(非常明显)。所以发生了什么事是我的NSTimer不正确地启动(当应用程序第一次启动时)。我的问题是,是否有办法检查应用程序是否从非活动状态恢复为首次启动?检查应用程序是否从非活动状态恢复为首次启动?

- (void)applicationWillResignActive:(UIApplication *)application { 
    // STOP CORE TIMER 
    [[[self mapController] coreTimer] invalidate]; 
    [[self mapController] setCoreTimer:nil]; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    // START CORE TIMER 
    [[self mapController] setCoreTimer:[NSTimer 
     scheduledTimerWithTimeInterval:ONE_SECOND 
           target:[self mapController] 
           selector:@selector(timerDisplay:) 
           userInfo:nil 
           repeats:YES]]; 
} 

回答

4

applicationWillEnterForeground似乎只在应用程序从背景回来时触发。刚刚测试过它,不会在启动时调用。

讨论

在iOS中4.0和更高,这种方法是 称为从 背景到活动状态的转换的一部分。 在进入 背景后,您可以使用此方法撤销对您的 应用程序所做更改的许多 。对此方法的调用始终是 ,然后调用 applicationDidBecomeActive:方法, ,然后将应用程序从 移至非活动状态。

+0

希望我早就知道这一点。我只是在ApplicationDidBecomeActive中使用了一个布尔检查来查看它是否刚刚启动。 – 2011-05-06 18:15:56

+0

非常感谢,一个问题:我处理用户锁定iPhone(顶部按钮),然后使用屏幕滑块解锁它,在这种情况下,应用程序永远不会进入背景(不会很快反正),它只是从applicationWillResignActive到applicationDidBecomeActive。 – fuzzygoat 2011-05-06 18:40:10

+0

那么根据我的测试'applicationWillResignActive'和'applicationDidBecomeActive'会在用户锁定和解锁手机时立即调用。 – 2011-05-06 22:18:24

相关问题