“未能加载窗口nib文件”是什么意思?

时间:2012-10-12 20:56:41

标签: macos cocoa

我正在研究我的第一个Cocoa应用程序,我非常希望

[NSWindowController loadWindow]: failed to load window nib file 'Genius Document'

意味着我做错了一些非常具体的事情,因为如果我必须回去重做所有绑定,我会想要自杀。

FWIW,我正在使用基于文档的应用程序,该应用程序(到目前为止)只有一个XIB文件,没有NIB文件。

我可以发布我的绑定的代码/截图,但如果没有必要,我不想让人们浏览它们。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您所描述的错误最终会发生,因为加载nib文件的调用失败。确保您已为Interface Builder文件提供了正确的名称。

您可以通过多种方式提供正确的值(取决于您对AppKit的使用),因此我将列出两种最常见的可能性,您可以找出适用于您的两种方式。鉴于你在问题中所说的内容,我怀疑你将会处理第一个场景。

NSDocument windowNibName

如果您依赖于文档体系结构的默认设置,则可能不会直接进行相关调用。相反,框架使用您在给定文档类上指定的任何nib名称代表您进行调用。

例如,如果您要创建一个文档类为“XYZDocument”的基于文档的新项目,Xcode模板将为您提供基本的XYZDocument类和XYZDocument.xib文件。 XYZDocument实现文件中包含以下内容:

//  XYZDocument.m

- (NSString *)windowNibName {
    return @"XYZDocument"; // this name tells AppKit which nib file to use
}

如果您要更改此值,则会产生[NSWindowController loadWindow]错误。

NSWindowController初始化方法

如果您自己进行此调用(可能在您自己的NSWindowController的子类中),那么您将编写如下所示的行。

//  XYZWindowController.m (a subclass of NSWindowController)

- (id)init {
    self = [super initWithWindowNibName:@"XYZDocument"];
    if (self) {
      // initializations
    }
    return self;
}

如果您提供的字符串参数与nib文件的名称不匹配,则会发生相同的错误。

答案 1 :(得分:1)

我在Xcode中运行了一个Clean(Cmd-Shift-K),这解决了我的问题。