【问题标题】:quit the application by setting NSTimer?通过设置 NSTimer 退出应用程序?
【发布时间】:2012-04-01 18:47:23
【问题描述】:

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

最近我做了一个无线电应用程序,它有一个用户设置来设置时间,使用 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];方法

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

【问题讨论】:

    标签: objective-c nstimer freeze terminate quit


    【解决方案1】:

    Apple 不会批准任何故意暂停或终止自身的应用程序。您只能使用listed in the official documentation 的那些方法,不包括suspendterminateWithSuccess

    【讨论】:

    • tanq 供您重播,任何其他冻结申请过程的方法,您能告诉我任何解决方案吗..我的客户有这些要求..
    • iPhone 的比喻是所有这些应用程序都存在,你可以随意进出它们。用户不应该考虑是否正在运行特定的单个应用程序,返回主屏幕始终意味着听从他们的指挥。因此,根据 Apple 的指导方针,我猜你只需要停止音频并弹出一个屏幕,说明收音机已经通过按钮或其他东西进入睡眠状态,然后再继续收听收音机(或者,理想情况下,回到音频开始之前的较早屏幕)。这可能会让人觉得很傻,但这就是 Apple 对您的界面指南的态度。
    • 我们在更新内容后终止了我们的应用程序,作为让 UIWebView 重新读取文件的解决方法(我们无法让它以任何其他方式执行)。在以这种方式接受应用程序一年多之后,Apple 才刚刚开始拒绝它。我们将我们的应用程序 OEM 给另一家公司,Apple 也为他们拒绝了它,所以我知道这不仅仅是随机拒绝。他们现在似乎拒绝任何退出的应用程序。 (拒绝迫使我们多花几天时间寻找解决 UIWebView 问题的方法,最终我们找到了。)
    【解决方案2】:

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

    Apple discourages 使用 exit() 因为从用户的角度来看它看起来像一个崩溃。但他们也说没有 API 调用可以优雅地终止您的应用程序。

    如果您正在寻找一种方法来终止您的应用程序而无需用户按下 home,在睡眠期间,我认为他不会将其与崩溃混淆,因为他不会关注您的应用程序并退出() 不会留下崩溃日志。

    所以,你的选择是:

    • 忘记这个,过一段时间就发出哔声提醒他关闭应用程序。 (可怕!)
    • 使用您的私人电话关闭应用程序并冒被 Apple 拒绝的风险。
    • 使用 exit() 关闭应用程序并坚持使用 POSIX(已接受)调用。

    【讨论】:

    • 所以你说的是使用 exit(0);没问题,但是有人说使用exit(0)是不被苹果认可的!
    • 我从来没有遇到过任何问题,它是 Apple API 调用的文档和使用。
    • 我可以这样调用 if (counter==0.0) { exit(0);
    • 在技术问答 QA1561 中,Apple 强烈反对使用退出,因为它会使应用程序看起来已经崩溃。 developer.apple.com/iphone/library/qa/qa2008/qa1561.html
    • 顺便说一句,Apple 在问答中解释了您的替代方案,“没有提供用于优雅终止 iPhone 应用程序的 API”或 exit(),这是不鼓励的。私有 API 可能会导致您的应用被拒绝。
    【解决方案3】:

    tanq 用于回放,所以我忘记了以编程方式退出我的应用程序。下一个方法是停止播放我的 MPMoviePlayerController 对象。得到下一级问题

    我的 sleepTime 设置页面和音乐播放页面,两者都是不同的 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];
    

    控制正确到达流媒体页面,但似乎播放器没有停止播放,我无法访问这些播放器选项中的任何一个 [播放器停止]; , [玩家暂停];

    musicPlayingPage 中这个方法的任何问题

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

    抱歉,如果我的问题无法理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多