2012-03-16 49 views
0

是他們通過編程方式退出應用程序的更好方法嗎?通過設置NSTimer退出應用程序?

最近,我提出,有一個用戶設置使用的NSTimer設定時間退出該應用處理(我的意思是睡眠時間)的無線應用。當時間到達應用程序應該停止其進程並退出。

我使用這些語句通過使用[[UIApplication的sharedApplication]暫停]當時間到達的退出程序,

[[UIApplication sharedApplication] suspend]; 
    [[UIApplication sharedApplication] terminateWithSuccess]; 

theTimer=[NSTimer scheduledTimerWithTimeInterval:(1.0/1.0) target:self selector:@selector(countTime) userInfo:nil repeats:YES]; 

counter-=1; 
timeLeft.text=[NSString stringWithFormat:@" %d",counter]; 
if (counter==0.0) { 

    [theTimer invalidate]; 
    [[UIApplication sharedApplication] suspend]; 
    [[UIApplication sharedApplication] terminateWithSuccess]; 

是它們的任何問題; [[UIApplication sharedApplication] terminateWithSuccess];方法

任何其他更好的方式來退出應用程序,或者至少凍結應用過程.. 我需要幫助嗎?

回答

0

我一直使用exit(0)。我想,如果你必須在應用程序退出之前運行代碼,則應該在退出(0)之前調用它。

蘋果discourages使用出口的(),因爲從用戶的角度來看,它看起來像一個崩潰。但他們也說沒有API調用來正常終止你的應用程序。

如果你正在尋找一種方式來終止您的應用程序,而用戶按HOME鍵,在睡眠的時候,我認爲他不會崩潰混淆,因爲他不會重視你的應用程序和退出()沒有崩潰日誌。

所以,你的選擇是:

  • 忘記這一點,一段時間後,只是發出蜂鳴聲提醒他關閉應用程序。 (太糟糕了!)
  • 使用您的私人電話關閉應用程序並冒着蘋果的拒絕風險。
  • 使用exit()關閉應用程序並堅持使用POSIX(接受)調用。
+0

所以你說的是使用exit(0);不是問題,但有人說使用exit(0)不被蘋果認可! – 2012-03-16 08:17:11

+0

我從來沒有遇到任何問題,它是由Apple API調用記錄和使用的。 – fbernardo 2012-03-16 08:33:29

+0

所以我可以打電話像if(counter == 0.0){ exit(0); – 2012-03-16 09:25:31

2

蘋果不會批准故意暫停或終止本身的任何應用程序。您只能使用listed in the official documentation的方法,其中不包括suspendterminateWithSuccess

+0

tanq爲您的重播,任何其他方式來凍結申請過程,請你告訴我任何解決方案..我的客戶有這些要求.. – 2012-03-16 08:14:02

+0

iPhone的隱喻是,所有這些應用程序存在,你跳進和跳出他們隨意。用戶無意考慮特定的個人應用程序是否正在運行,並且回到主屏幕總是意味着他們的命令。因此,根據蘋果的指導方針,我想你只需停下音頻,然後拋出一個屏幕,說明收音機已經用按鈕或其他東西進入睡眠狀態,然後回到收聽收音機(或者,理想情況下,返回在音頻開始之前的更早的屏幕)。它可能會感覺很愚蠢,但這是蘋果公司爲您制定接口指南的態度。 – Tommy 2012-03-16 18:42:05

+0

我們在更新內容後終止了我們的應用程序,作爲一種解決方法讓UIWebView重新讀取文件(我們無法以任何其他方式獲取文件)。用這種方法接受了一年多的應用程序後,蘋果剛剛開始拒絕它。我們將應用程序貼裝到另一家公司,蘋果公司也拒絕了它,所以我知道這不僅僅是一種隨機拒絕。看起來他們現在拒絕任何退出的應用程序。 (這種拒絕迫使我們花費更多的時間尋找解決UIWebView問題的方法,我們最終發現了這個問題。) – 2012-06-27 14:11:55

0

tanq爲您的重播,所以我只是忘記了以編程方式退出我的應用程序。接下來的方法是停止播放我的MPMoviePlayerController對象。得到了一個新的水平問題

我的設置,睡眠時間和音樂播放頁面進行,兩者是不同的viewControllers ,所以我不能直接在時間設置頁面訪問的MPMoviePlayerController對象,所以我創建了音樂播放頁面

的方法
MPMoviePlayerController *player=[[MPMoviePlayerController alloc]initWithContentURL:[NSURL URLWithString:@"http://www.radioparadise.com/musiclinks/rp_64aac.m3u"]]; 
[player prepareToPlay]; 
[player play]; 

- (IBAction)StopPlay:(id)sender 
{ 
[player stop]; 
} 

所以我創建了一個音樂播放頁面的對象,我從設置頁面調用了這個方法。, 這是我在settingsPage

@class MusicPlayingPage; 
@interface secondView : UIViewController 
{ 
MusicPlayingPage *audio; 
} 

代碼,並呼籲在settingsPage

[audio stopPlay]; 

控制正確達到streamingPage的方法,但似乎球員沒有回採玩,我不能訪問任何這些球員選項[球員停止]; ,[玩家暫停];

在musicPlayingPage

- (IBAction)StopPlay:(id)sender 
{ 
[player stop]; 
} 

對不起,如果我的問題是無法理解這種方法的任何問題。