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

时间:2009-11-10 12:43:13

标签: 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);
    // ***
}   

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

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

我认为调用exit完全没问题,只需在执行此操作之前调用[[NSUserDefaults standardUserDefaults] synchronize]即可。您可以在Apple Documentation中了解synchronize方法:

  

因为这种方法是自动的   定期调用,使用   这种方法只有你不能等待   用于自动同步(for   例如,如果您的应用程序是关于   退出)或者如果你想更新   用户默认为磁盘上的内容   虽然你没有做任何改变。

答案 2 :(得分:3)

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

[[UIApplication sharedApplication] terminate];