背景: 我的应用程序中有应用程序内语言更改,我还有基于区域设置的数字格式。我已经写了NSLocale的扩展来处理这个问题。我的语言环境包含应用内语言。这一切对我来说都很好。
问题: 在少数几个地方(ex键盘),仍然可以通过平台从[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: 是否有其他方法可以解决我的问题?
答案 0 :(得分:2)
虽然没有合法途径,但肯定是可能的。只需调用一个不存在的选择器。有些人甚至设置了一个以此为条件的日期,以便此功能仅在通过苹果审核流程后生效。
您需要调整以下系统方法并使用您自己的值覆盖它们:
autoupdatingCurrentLocale
systemLocale
currentLocale
preferredLanguages
availableLocaleIdentifiers
如果您不知道如何操作,请查看http://nshipster.com/method-swizzling/ 以及JRSwizzle:https://github.com/rentzsch/jrswizzle
HTH