或“如何模拟主页按钮按下事件?”
我需要重启我的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)
,则语言不会更改。
答案 0 :(得分:7)
调用exit(0)
是从代码中退出程序的唯一合法(但非常不推荐)方式。
作为一种可能的解决方法,您可以显示UIAlertView没有无法解除的按钮(强制用户手动退出程序)并告诉用户他必须这样做以应用您的更改。
答案 1 :(得分:5)
我认为调用exit
完全没问题,只需在执行此操作之前调用[[NSUserDefaults standardUserDefaults] synchronize]
即可。您可以在Apple Documentation中了解synchronize
方法:
因为这种方法是自动的 定期调用,使用 这种方法只有你不能等待 用于自动同步(for 例如,如果您的应用程序是关于 退出)或者如果你想更新 用户默认为磁盘上的内容 虽然你没有做任何改变。
答案 2 :(得分:3)
值得注意的是,还有一个私有API调用。当然,所有关于使用私有API的常见警告都适用。
[[UIApplication sharedApplication] terminate];