【发布时间】:2023-03-31 10:05:01
【问题描述】:
背景: 我的应用程序中有应用程序内语言更改,并且我还具有基于区域设置的数字格式。我已经为 NSLocale 编写了一个扩展来处理这个问题。我的语言环境包含应用内语言。这一切对我来说都很好。
问题: 在少数地方(前键盘)区域设置仍由平台从 [NSLocale locale] 读取。当设备和应用内语言不同时,这会给我带来问题。我试图通过将应用内语言设置为用户默认值来解决此问题。这有效,但只有在我杀死应用程序并重新启动它之后。重新启动后 [NSLocale locale] 返回正确的值,键盘的行为就像我想要的那样。
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString* lang = @"en_US";
[defaults setObject:@[lang] forKey:@"AppleLanguages"];
[defaults setObject:@[lang] forKey:@"NSLanguages"];
[defaults setObject:lang forKey:@"AppleLocale"];
问题1: 有什么合法的方法可以杀死/重新启动应用程序吗? Apple 它自己在语言更改或通知设置更改中执行此操作。我有什么办法可以做到这一点?
问题2: 有没有其他方法可以解决我的问题?
【问题讨论】:
-
只是一个想法,但是您可以在应用程序开始时使用
locale方法而不是扩展程序来检查您想要的结果吗?这甚至适用于在不重新启动的情况下不使用您的扩展程序的地方,不是吗?我可能是错的,但也许值得进行测试以避免试图绕过应用程序审查(如果他们发现这可能对你不利)。还要注意stackoverflow.com/questions/4399611 中的几个答案,这些答案解释了在某些设计中,Apple 可能允许使用普通的旧exit(0)退出。