【问题标题】:How to setenv (set environment variable) using mainmenu nib (xib) file in Cocoa or Xcode programming?如何在 Cocoa 或 Xcode 编程中使用 mainmenu nib (xib) 文件设置环境(设置环境变量)?
【发布时间】:2011-12-24 01:38:47
【问题描述】:

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

【问题讨论】:

    标签: xcode cocoa nsbundle getenv loadnibnamed


    【解决方案1】:

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

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

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

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

    所以,我似乎需要一种方法来设置环境变量 启动 Mac GUI 应用程序。

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

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

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

    【讨论】:

    • 我认为你对所有观点都是正确的。我在调试代码时弄错了。 setenv 和 getenv 工作。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      要在您的可分发应用程序中设置环境变量,以便为用户设置它们(Xcode 只会影响您的调试运行),请在应用程序的 Info.plist 中设置 the LSEnvironment property

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-02
        • 2018-07-13
        • 2014-09-29
        • 1970-01-01
        • 2019-04-02
        • 1970-01-01
        • 2020-02-14
        相关资源
        最近更新 更多