您描述的错误最终会发生,因为加载 nib 文件的调用失败。确保您为 Interface Builder 文件提供了正确的名称。
您可以通过多种方式提供正确的值(取决于您对 AppKit 的使用),因此我将列出两种最常见的可能性,您可以找出哪一种适用于您。鉴于您在问题中所说的话,我怀疑您将处理第一种情况。
NSDocument 窗口NibName
如果您依赖文档架构的默认设置,您可能不会直接进行有问题的调用。相反,框架使用您在给定文档类上指定的任何 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 文件的名称不匹配,则会发生相同的错误。