2014-01-08 127 views
1

直到昨天,我确信NSTimer将在应用程序进入后台后停止。我有一种感觉就像遇到了一些异常情况。NSTimer在应用程序进入后台后不会停止

我的应用程序有更新位置和播放音频背景模式。更新位置每隔几秒刷新一次。但它只发生在其中一个应用程序屏幕上。还有NSTimer刷新一些用户界面。

我安排这样的:

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime) userInfo:nil repeats:YES]; 

还有一种方法,它的内容是现在无关紧要:

-(void)updateTime 
{ 
//irrelevant content, but the method gets fired even when the app is in background 
} 

奇怪的是,thah的方法,这是唯一的由NSTimer发射,现在甚至在AP进入背景后也被解雇。这里发生了什么?这是正常的行为吗?

+0

你的计时器在哪里声明? – iPatel

+0

viewWill ViewController的出现 –

回答

3

因为您正在使用具有位置和音频的背景模式,所以您的应用程序在background.and中仍处于活动状态,因此您的计时器正在运行。

如果您删除您正在使用的位置和音频的背景模式,然后尝试定时器不会工作。

其正常行为。如我错了请纠正我。

+0

那么......我可以使用NStimer吗?那么它会不会被苹果拒绝?这对我来说非常方便,因为这正是我需要的。我只是读了很多东西,说这是不可能的... –

+0

是的,苹果不会拒绝这个,我已经创建了应用程序与这种情况下,它是住在appstore。 –

+0

这是令人惊讶的,谢谢! –

1

创建您的计时器作为公共我的意思是将它添加到.h文件并访问它时,您的应用程序。输入回地球模式

- (void)applicationDidEnterBackground:(UIApplication *)application 

通过上述方法并将您的计时器设置为inValidate ..其修复。

如果你想再做一次启动定时器,那么你可以通过

- (void)applicationWillEnterForeground:(UIApplication *)application 

这个方法访问它。在这里你需要重新创建你的计时器。

1

您可以使用无效计时器来停止计时器。

[self.timer invalidate]; self.timer = nil;

相关问题