如何在Cocoa或Xcode编程中使用mainmenu nib(xib)文件进行setenv(设置环境变量)?

时间:2011-12-24 01:38:47

标签: xcode cocoa nsbundle getenv loadnibnamed

我是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方法加载它。

3 个答案:

答案 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