在NSUserDefaults中覆盖AppleLanguages

Jor*_*orn 6 nsuserdefaults ios

如果我在NSUserDefaults中覆盖/更改AppleLanguages,则在更改系统语言时,iOS不再更新列表.如果我保持列表不变,则数组中的第一个对象将始终是系统语言,但是,如果我在索引0处插入新对象,稍后更改系统语言,iOS将不会将新语言放在顶部列表了.有没有办法在NSUserDefaults中更改AppleLanguages,并且系统语言更改后系统仍然会更新列表?

来自Accatyyc的解决方案非常出色,如果您使用Swift,这里是解决方案:

  1. 创建一个main.swift文件,在接受的答案中添加Swift版本的代码:

    NSUserDefaults.standardUserDefaults().removeObjectForKey("AppleLanguages")
    UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(UIApplication), NSStringFromClass(AppDelegate))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 转到AppDelegate并删除以下行:

    @UIApplicationMain //Removing this tells Xcode to use your main.swift file
    
    Run Code Online (Sandbox Code Playgroud)

Acc*_*yyc 6

经过反复试验,我找到了解决方案!删除整个 AppleLanguages 密钥似乎将其恢复为用户在设置应用程序中设置的内容:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AppleLanguages"];
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
Run Code Online (Sandbox Code Playgroud)