Objective c 通过设置NSTimer退出应用程序?

Objective c 通过设置NSTimer退出应用程序?,objective-c,nstimer,freeze,terminate,quit,Objective C,Nstimer,Freeze,Terminate,Quit,他们是否有更好的方法以编程方式退出应用程序 最近,我制作了一个无线电应用程序,它有一个用户设置,可以使用NSTimer设置退出应用程序进程的时间(我指的是睡眠时间)。当时间到达应用程序时,应停止其进程并退出 我使用这些语句在时间到达时退出应用程序 [[UIApplication sharedApplication] suspend]; [[UIApplication sharedApplication] terminateWithSuccess]; theTimer=[NSTimer

他们是否有更好的方法以编程方式退出应用程序

最近,我制作了一个无线电应用程序,它有一个用户设置,可以使用NSTimer设置退出应用程序进程的时间(我指的是睡眠时间)。当时间到达应用程序时,应停止其进程并退出

我使用这些语句在时间到达时退出应用程序

  [[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]suspend]是否有任何问题; [[UIApplication sharedApplication]terminateWithSuccess];方法

还有其他更好的退出应用程序的方法吗,或者至少冻结应用程序进程。。
我需要帮助吗?

苹果不会批准任何故意挂起或终止自身的应用程序。您可以只使用那些方法,其中不包括
suspend
terminateWithSuccess

我一直使用exit(0)。我认为,如果您必须在应用程序退出之前运行代码,则应该在退出之前调用它(0)

苹果公司拒绝使用exit(),因为从用户的角度来看,它看起来像一场崩溃。但他们也表示,没有API调用可以优雅地终止你的应用程序

如果您正在寻找一种方法来终止您的应用程序,而不让用户在睡眠时间按home键,我想他不会将其与崩溃混淆,因为他不会关注您的应用程序,exit()也不会留下崩溃日志

因此,您的选择是:

  • 忘记这一点,过一段时间后只需发出嘟嘟声提醒他关闭应用程序。(太可怕了!)
  • 使用您的私人电话关闭应用程序,并冒被苹果拒绝的风险
  • 使用exit()关闭应用程序并坚持POSIX(已接受)调用

谢谢你的重播,所以我忘了按程序退出我的应用程序。下一种方法是停止播放我的MPMoviePlayerController对象。有下一级问题吗

“我的睡眠时间设置”页面和“音乐播放”页面都是不同的ViewController 所以我不能在时间设置页面直接访问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; 
}
[audio stopPlay];
并在settingsPage中调用该方法

@class MusicPlayingPage;
 @interface secondView : UIViewController
{
MusicPlayingPage *audio; 
}
[audio stopPlay];
控件正确到达streamingPage,但似乎玩家没有停止游戏,我无法访问这些玩家选项中的任何一个[player stop],[玩家暂停]

MusicLayingPage中此方法有任何问题吗

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

如果我的问题不可理解,很抱歉。

tanq对于您的重播,您是否可以告诉我任何其他冻结应用程序进程的方法。我的客户有这些要求。iPhone的比喻是,所有这些应用程序都存在,您可以随意进出。用户不必考虑特定的应用程序是否正在运行,返回主屏幕始终是他们的命令。因此,根据苹果公司的指导方针,我想你只需要停止播放音频,并弹出一个屏幕,解释收音机已进入睡眠状态,然后用按钮或其他东西返回收听收音机(或者,理想情况下,返回到音频开始前的较早屏幕)。这可能让人觉得很傻,但这是苹果对用户界面指南的态度。我们在更新内容后终止了我们的应用程序,以此作为一种解决办法,让UIWebView重新读取文件(我们无法让它以任何其他方式执行)。在用这种方法接受应用程序一年多之后,苹果公司刚刚开始拒绝它。我们将我们的应用程序OEM给另一家公司,苹果也拒绝了他们的申请,所以我知道这不仅仅是一次随机的拒绝。看起来他们现在拒绝任何退出的应用程序。(拒绝迫使我们再花几天的时间寻找解决UIWebView问题的方法,我们最终发现了这个问题。)那么你是说使用exit(0);这不是问题,但有人说使用出口(0)未经苹果批准!我从来没有遇到过任何问题,这是一个记录在案的苹果API调用。所以我可以像if(counter==0.0){exit(0)那样调用;在技术问答QA1561中,苹果强烈反对使用exit,因为它会使应用程序看起来崩溃。developer.Apple.com/iphone/library/qa/qa2008/QA1561.htmlAnd顺便说一句,苹果在问答中解释了你的选择,“没有为优雅地终止iPhone应用程序提供API”或exit(),这是不鼓励的。私有API可能会导致您的应用程序被拒绝。