我是Cocoa编程和Xcode的新手。我想知道如何使用MainMenu.nib(或.xib)文件setenv(或设置环境变量)。我在主函数中有别人的代码,如下所示:
[NSApplication sharedApplication];
[NSBundle loadNibNamed:@"MainMenu" owner: NSApp];
在第二行之后,它可以获得一个环境变量:
if (!getenv("R_HOME")) {
fprintf(stderr, "R_HOME is not set.\n");
return -1;
}
我想知道如何在Xcode 3的最新版本中构建一个nib(或xib)文件,例如MainMenu.xib,以便它可以用于setenv。我做的一件事是在不使用nib文件的情况下编写setenv代码:
setenv("R_HOME", "/Library/Frameworks/R.framework/Resources", 1)
但是,当我通过双击xxx.app执行Cocoa GUI编程时,这不起作用,尽管当我执行程序的命令行版本时,它仍然有效。因此,在启动Mac GUI应用程序时,我需要一种设置环境变量的方法。我已经看到了设置环境变量的其他方法,但我想知道如何使用nib(或xib)文件设置环境变量,以及使用NSBundle的loadNibNamed方法加载它。
答案 0 :(得分:2)
环境变量通常与您的方案中的选项一起设置。
从“产品”菜单中选择“编辑方案”,然后选择所需的目标。现在在右侧选择“参数”选项卡。
在“Arguments”选项卡上,您可以设置要传递给正在运行的应用程序的命令行参数和环境变量。
答案 1 :(得分:2)
我想知道如何构建一个nib(或xib)文件,例如, MainMenu.xib,在Xcode 3的最新版本中,以便它可以用于 SETENV。
Nib文件与环境变量无关。它们不包含任何代码,除了提供用于实例化应用程序代码提供的类的数据之外,它们对程序没有影响。我想你可以编写一个设置环境变量的类,然后用一个nib来实例化那个类,但是这样做和在你的代码中实例化类之间没有区别。
我做的一件事是在不使用笔尖的情况下编写setenv代码 file:...但是,当我执行Cocoa GUI时,这不起作用 通过双击xxx.app进行编程,虽然这在我工作时有用 执行程序的命令行版本。
你怎么知道它不起作用?您是在调用getenv()来检查代码中R_HOME的值,还是在终端中使用env
之类的命令?如果是后者,则不会查看设置变量的相同环境。
所以,似乎我需要一种方法来设置环境变量 启动Mac GUI应用程序。
你想要完成什么?您似乎不太可能为自己的程序设置环境变量 - 它已经知道了这个值,因此走出环境似乎毫无意义。你想和另一个节目沟通吗?
我已经看到了设置环境变量的其他方法,但我想 知道如何使用nib(或xib)文件设置环境变量, 并使用NSBundle的loadNibNamed方法加载它。
同样,nib文件和环境变量之间确实没有交集。如果您希望能够根据某些外部变量修改应用程序的行为,则可以在.login文件中设置环境变量,这些值应该可由您的应用程序读取。也许更好的解决方案是使用默认系统 - 您的应用程序可以通过NSUserDefaults在默认系统中读取和写入值,您可以使用defaults
命令在命令行读取和写入相同的值。 / p>
答案 2 :(得分:0)
要在可分发应用程序中设置环境变量,以便为用户设置它们(Xcode仅影响调试运行),请在应用程序的Info.plist中设置the LSEnvironment
property。