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

标签 xcode cocoa nsbundle getenv loadnibnamed

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

最佳答案

I want to know how one can construct a nib(or xib) file, e.g., MainMenu.xib, in Xcode 3's latest version so that it can be used to setenv.

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

One thing that I did was to code setenv without using a nib file:...But, this did not work when I execute the Cocoa GUI programming by double clicking the xxx.app although that worked when I execute the program's command line version.

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

So, it seems like that I need a way to set environment variables when a Mac GUI application is launched.

你想实现什么目标?您似乎不太可能为自己的程序使用设置一个环境变量——它已经知道该值,因此退出环境似乎毫无意义。您是否正在尝试与另一个程序通信?

I have seen other ways of setting environment variables, but I want to know how one can set environment variables using nib (or xib) files, and by loading it using NSBundle's loadNibNamed method.

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

关于xcode - 如何在 Cocoa 或 Xcode 编程中使用 mainmenu nib (xib) 文件设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8622111/

相关文章:

swift - 使导航栏透明后如何将其更改回半透明

ios - 当 UITabBar 不是 rootViewController 时,如何以编程方式将 UITabBar 与带有 NIB 的不同 ViewController 链接

objective-c - Mac OS X : Global Shortcut to get selected text/image in Application

cocoa - 在核心数据文档中存储文档特定设置的最佳方法是什么?

ios - 核心数据模型文件不在 bundle 中

ios - 如何从包中获取类

ios - 如何查看由phonegap启动的ios模拟器中的JavaScript错误?

ios - 在 OS X 上使用 ndenv 设置 React Native

xcode - 计算机辅助翻译和 Xcode

iphone - 在 iPhone 应用程序中添加和读取一个 json 文件