2014-01-08 161 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;

相關問題