2

我是 Cocoa 编程和 Xcode 的新手。我想知道如何使用 MainMenu.nib(或 .xib)文件设置环境(或设置环境变量)。我在主函数中有其他人的代码,如下所示:

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

4

3 回答 3

2

环境变量通常与方案中的选项一起设置。

从“产品”菜单中选择“编辑方案”并选择您想要的目标。现在在右侧选择“参数”选项卡。

在“参数”选项卡上,您可以设置要传递给正在运行的应用程序的命令行参数和环境变量。

于 2011-12-24T02:30:43.937 回答
2

我想知道如何在 Xcode 3 的最新版本中构造一个 nib(或 xib)文件,例如 MainMenu.xib,以便它可以用于 setenv。

Nib 文件与环境变量没有任何关系。它们不包含任何代码,除了提供用于实例化应用程序代码提供的类的数据外,它们对程序没有任何影响。我想您可以编写一个设置环境变量的类,然后使用 nib 实例化该类,但是这样做与仅在代码中实例化该类没有区别。

我做的一件事是在不使用 nib 文件的情况下编写 setenv 代码:...但是,当我通过双击 xxx.app 执行 Cocoa GUI 编程时,这不起作用,尽管当我执行程序的命令行版本时它起作用了。

你怎么知道没用?您是调用 getenv() 来检查代码中 R_HOME 的值,还是使用env终端中的命令?如果是后者,则您查看的不是设置变量的同一环境。

因此,似乎我需要一种在启动 Mac GUI 应用程序时设置环境变量的方法。

你想达到什么目的?您似乎不太可能为自己的程序设置环境变量——它已经知道该值,所以走出环境似乎毫无意义。您是否正在尝试与另一个程序进行通信?

我见过其他设置环境变量的方法,但我想知道如何使用 nib(或 xib)文件设置环境变量,并使用 NSBundle 的 loadNibNamed 方法加载它。

同样,nib 文件和环境变量之间确实没有交集。如果您希望能够根据某些外部变量修改应用程序的行为,您可以在 .login 文件中设置环境变量,这些值应该可以被您的应用程序读取。也许更好的解决方案是使用默认系统——您的应用程序可以通过 NSUserDefaults 在默认系统中读取和写入值,并且您可以使用defaults命令在命令行中读取和写入这些相同的值。

于 2011-12-24T03:11:00.563 回答
0

要在您的可分发应用程序中设置环境变量,以便甚至为用户设置它们(Xcode 仅影响您的调试运行),LSEnvironment在您的应用程序的 Info.plist 中设置属性。

于 2011-12-25T19:33:57.353 回答