【问题标题】:How to quit an iPhone app nicely?如何很好地退出 iPhone 应用程序?
【发布时间】:2009-11-10 12:43:13
【问题描述】:

或“如何模拟主页按钮按下事件?”

我需要重新启动我的 iPhone 应用程序,并且我希望程序退出,因此用户只需启动它。

如果我只是使用exit(0),一些更改将不会被保存,就像用户通过按主页按钮退出时那样。

语言更改需要重新启动。

相关代码:

- (void)onChangeLanguage: (id)sender {
    NSArray *lang = [NSArray arrayWithObjects:((Whatever *)sender).newLanguage, nil];
    [[NSUserDefaults standardUserDefaults] setObject:lang forKey:@"AppleLanguages"];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
    NSString *currentLanguage = [languages objectAtIndex:0];

    NSLog(@"Current language: %@", currentLanguage);
    // ***
}   

如果用户使用主页按钮重新启动,语言将会改变。

如果// ***exit(0) 替换,语言不会改变。

【问题讨论】:

标签: iphone internationalization quit


【解决方案1】:

调用exit(0) 是从代码中退出程序的唯一合法(但强烈不推荐)方式。
作为一种可能的解决方法,您可以显示 UIAlertView 没有无法关闭的按钮(强制用户手动退出您的程序)并告诉用户他必须这样做才能应用您的更改。

【讨论】:

  • 为什么不推荐拨打exit
  • 对我来说似乎是糟糕的界面设计。
  • 啊哈,所以从工程的角度来看没有错?我同意意外退出应用程序对用户不公平,但有时它完全有效——例如,如果你有一个退出按钮。 (无论出于何种原因,许多应用程序都会这样做。)
  • 来自苹果 HIG 的引用:“iPhone 应用程序永远不应该以编程方式退出,因为这样做对用户来说就像是崩溃。然而,有时,当外部环境阻止您的应用程序按预期运行时。当这种情况发生时,您需要将情况告诉用户并解释他们可以采取哪些措施。这样,用户可以决定是要采取纠正措施并继续使用您的应用程序,还是按 Home 按钮并打开其他应用程序。”
  • 我同意显示这个警报是丑陋的......它也可能只是显示一个警报注释(一次性)向用户解释在他重新启动应用程序之前不会应用更改
【解决方案2】:

我认为拨打exit 非常好,只需在拨打电话之前拨打[[NSUserDefaults standardUserDefaults] synchronize]。您可以在Apple Documentation 中了解synchronize 方法:

因为这个方法是自动 定期调用,使用 仅当您迫不及待时才使用此方法 对于自动同步(对于 例如,如果您的应用程序是关于 退出)或者如果您想更新 用户甚至默认为磁盘上的内容 尽管您没有进行任何更改。

【讨论】:

    【解决方案3】:

    值得注意的是,还有一个私有 API 调用。当然,所有关于使用私有 API 的常见警告都适用。

    [[UIApplication sharedApplication] 终止];

    【讨论】:

    • 哎呀,“关于使用私有 API 的常见警告”是什么?
    • 通常的警告是:(1) 您的应用程序可能会被 App Store 拒绝;(2) 私有 API 不能保证保持稳定,这意味着您的应用程序很容易被新固件破坏。
    • 没错。现在事情变得更加危险,因为 Apple 正在扫描使用私有 API 调用来拒绝它们从应用商店中的应用。使用私有 API 不是一个好的选择,但 exit(0) 也不太正确(应用程序应该首先触发通知)。显示提醒用户按下主页按钮并重新启动应用程序可能是最好的方法,并且最符合 Apple 的 HIG。
    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多