[NSBundle loadNibNamed:owner:] 如何在 Xcode 3.1 中工作?

Posted

技术标签:

【中文标题】[NSBundle loadNibNamed:owner:] 如何在 Xcode 3.1 中工作?【英文标题】:How does [NSBundle loadNibNamed:owner:] work in Xcode 3.1? 【发布时间】:2010-11-18 18:26:04 【问题描述】:

我正在使用较旧的 Mac 进行开发。我无法访问运行 Xcode 3.1 的较新 Mac,但我想确保我的源代码可以在它们上运行。到目前为止这很容易,我所要做的就是忽略名称旁边带有“已弃用”的任何内容,但是从 NIB 到 XIB 的变化让我有点不知所措。我读过的东西似乎暗示 XIB 在 Release 构建期间被编译成 NIB,但在 Debug 构建期间它们可能不会。

这在 Xcode 3.1 中会做什么?

#import <Cocoa/Cocoa.h>

int main(int argc, char *argv[])

 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 [NSApplication sharedApplication];

 [NSBundle loadNibNamed:@"MainMenu" owner: NSApp];
 [[NSApp mainMenu] removeItem: [[NSApp mainMenu]itemWithTitle: @"File"]]; 

 [pool release];
 [NSApp run];
 return NSApplicationMain(argc,  (const char **) argv);

调试失败,因为 MainMenu.nib 不存在?还是每次应用程序编译时都会将 XIB 转换为 NIB,期间,我不必担心这些?

【问题讨论】:

它的工作方式与在任何其他开发环境中的工作方式相同。这是一个 Cocoa 方法,而不是 Xcode IDE 的一个特性。 Cocoa 最终是操作系统的一部分,那么,您要问的是哪个版本的操作系统? 【参考方案1】:

XIB 总是被编译成 NIB 以在运行时使用。 XIB 只是一种基于 XML 的存储格式。通过编译 XIB 生成的 NIB 不包含编辑 NIB 文件所需的信息:XIB 编译为 只读 NIB。这根本不会影响您的应用程序如何使用它们:就它而言,NIB 就是 NIB 就是 NIB。

【讨论】:

太棒了!这真是太好了。我一直看到人们说 XIB 将在“应用程序部署”期间编译为 NIB,我认为这可能意味着“仅在发布构建期间”。感谢您解决了我这个老实说相当可怜的问题。

以上是关于[NSBundle loadNibNamed:owner:] 如何在 Xcode 3.1 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

IOS NSBundle使用(访问文件夹)

NSBundle - (尚未加载)错误

如何探索 NSBundle 内容?

NSBundle UIImageView &UIButton

NSBundle 不同文件夹中的两张图片同名

NSBundle 加载一个 NSViewController