有没有办法在NSApplicationMain之前修改参数?

时间:2018-07-10 01:57:20

标签: objective-c xcode macos

我想修改命令行参数,特别是添加或修改“ -AppleLanguages”(由MacOS自动选择),以便我的应用程序根据用户指定的某些区域设置参数使用不同的语言设置。

例如,“ myApp -uselocale es_es”将使用西班牙语作为UI,而不是默认系统语言。

int main(int argc, char *argv[]){
    // I want to modify arguments before it runs!
    NSApplicationMain(argc,  (const char **) argv);
    return 0;
}

据说如果在调用NSApplicationMain之前在main中修改argv不会产生任何效果,因为它会从NSProcessInfo获取参数。

因此,需要更改NSProcessInfo.arguments。
我在这里找到了一些东西:http://www.taffysoft.com/pages/20060612-01.html。 但是,当我将该代码添加到main.m中时,它会生成链接错误:体系结构x86_64的未定义符号:“ _ OBJC_IVAR _ $ _ NSProcessInfo.arguments”。

有什么方法可以实现而无需重新启动我的应用程序?

1 个答案:

答案 0 :(得分:0)

这不是修改参数的方法,但是您只需在应用程序的首选项中为AppleLanguages默认设置一个值,就可以实现最终目标。如果您足够早地进行此操作,则对于该启动将是有效的。例如:

[[NSUserDefaults standardUserDefaults] setObject:@[@"zh-Hant-TW"] forKey:@"AppleLanguages"];

请注意,该对象是一个数组,而不仅仅是一个字符串。