applicationWillTerminate 问题

Posted

技术标签:

【中文标题】applicationWillTerminate 问题【英文标题】:applicationWillTerminate problem 【发布时间】:2011-06-06 07:18:05 【问题描述】:

我想在用户单击 Iphone Home 按钮时显示 UIAlertView(表示关闭应用程序)

我已经完成了这些代码

- (void)applicationWillTerminate:(UIApplication *)application

    NSString *errorString =@"Testing";

    UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Alert" message:errorString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [errorAlert show];
    [errorAlert release];

但是 UIAlertView 没有显示。请帮忙

提前致谢

【问题讨论】:

【参考方案1】:

用户的目标是在按下主页按钮时关闭您的应用。苹果建议让他/她这样做。我想说的是:不要那样做。我认为这甚至是不可能的。

【讨论】:

但我想在用户想要关闭应用程序时显示 UIAlertView。我该怎么办? 是的,请不要这样做。作为用户,当我出于任何原因想要退出时,我会讨厌这种中断。 苹果不允许此事件您在此处键入警报代码,然后它将无法正常工作。这个方法提供给开发者在终止时保存数据或做一些重要的工作。【参考方案2】:

看Problem with applicationShouldTerminate on iPhone:

永远不会显示警报视图,因为 'show' 方法不会阻塞,并且 因此,结束 'applicationWillTerminate' 已达到 创建后立即 警报视图并尝试显示它。一世 相信这是设计使然。你不能 真正开始异步操作 在“applicationWillTerminate”中。

【讨论】:

但我想在用户想要关闭应用程序时显示 UIAlertView。我该怎么办? 你不能那样做!如果您需要这样做,那么 ios 可能不是您的平台。【参考方案3】:

    applicationWillTerminate: 在 iOS 的较新版本中按下 Home 按钮时可能不会被调用,因为应用程序可能只是进入后台模式,而不是实际终止。

    1234563显示警报时,应用程序已处于非活动状态!所以真正发生的事情是,当用户按下主页按钮时,警报消失了,当他们恢复您的应用时,他们看到一个神秘的警报弹出。

不要询问用户是否想退出您的应用。这不是 iOS 的常态。而是将所有状态保存在applicationDidEnterBackground: 中,并在applicationWillEnterForeground:application:didFinishLaunchingWithOptions: 中恢复它们,让用户感觉好像应用从未终止过。

【讨论】:

【参考方案4】:

您可能不想使用applicationWillTerminate,而是使用applicationWillResignActive。更多信息请查看 this one 等较早的帖子。

【讨论】:

【参考方案5】:

当应用程序收到 SIGKILL(Exit) 命令时,您无法显示 uialertview。您可以在 applicationWillTerminate 中调用任何文件或后台函数 - 为此,您需要在 plist 中设置一个键。

UIApplicationExitsOnSuspend - 布尔值 - 是。

【讨论】:

以上是关于applicationWillTerminate 问题的主要内容,如果未能解决你的问题,请参考以下文章

“applicationWillTerminate”没有被迅速调用

applicationWillTerminate 何时调用,何时不调用

Swift - 在 applicationWillTerminate 中调用本地通知方法

为啥 UIWebView 不在我的应用程序委托中的 applicationWillTerminate: 处加载 NSURLRequest?

如何为启用了后台的 iOS 应用程序获取 applicationWillTerminate 通知?

在 applicationWillTerminate() 中找出应用程序在哪个视图上终止