3

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

我需要重新启动我的 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),语言不会改变。

4

3 回答 3

7

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

于 2009-11-10T12:49:34.957 回答
5

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

由于此方法会定期自动调用,因此仅当您无法等待自动同步(例如,如果您的应用程序即将退出)或您想要更新用户默认值时才使用此方法,即使您没有进行任何更改。

于 2009-11-10T14:07:20.933 回答
3

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

[[UIApplication sharedApplication] 终止];

于 2009-11-10T14:02:47.347 回答