如何很好地退出iPhone应用程序?

shi*_*jin 3 iphone internationalization quit

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

我需要重新启动我的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);
    // ***
}   
Run Code Online (Sandbox Code Playgroud)

如果用户使用主页按钮重新启动,则语言将更改.

如果// ***替换为exit(0),则语言不会更改.

Vla*_*mir 7

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

  • 来自苹果HIG的报道:"iPhone应用程序永远不应该以编程方式退出,因为这样做会让用户感到崩溃.但是,有时,当外部环境阻止您的应用程序按预期运行时.当发生这种情况时,您需要告诉用户有关情况并解释他们可以对此做些什么.用户可以决定是否要采取纠正措施并继续使用您的应用程序,或者按"主页"按钮并打开其他应用程序." (4认同)

zou*_*oul 5

我认为打电话是完全可以的exit,只需[[NSUserDefaults standardUserDefaults] synchronize]在你这样做之前打电话.您可以synchronizeApple文档中阅读有关该方法的信息:

因为此方法是定期自动调用的,所以只有在您无法等待自动同步时(例如,如果您的应用程序即将退出)或者您希望将用户默认值更新为磁盘上的内容,请使用此方法你没有做任何改变.