我正在开发一个基于文档的应用程序。我正在为文档窗口使用专用的窗口控制器,并调用-[NSDocument makeWindowControllers]
方法。
我的窗口控制器初始化如下:
- (instancetype) init
{
if (self = [super initWithWindowNibName:@"Document" owner:self]) {
}
return self;
}
此处,@"Document"
是.xib文件,其中包含使用项目创建的主文档窗口。
这里的基本原理是,这个窗口控制器总是使用这种类型的窗口进行初始化,因此参数在-init
的实现中都是硬编码和隐藏的(同时还方便地将窗口所有者设置为self
)。
因此,实例化窗口控制器的一方(在我的情况下,文档类)不需要担心使用哪个笔尖,只需调用-init
。
问题是,我打破了指定的初始化链,Xcode抱怨这些警告:
语义问题方法覆盖指定的初始值设定项 超类'-initWithCoder:'找不到。
语义问题指定的初始化程序缺少对a的“超级”调用 指定超类的初始化者。
语义问题方法覆盖指定的初始值设定项 超类'-initWithWindow:'找不到。
语义问题指定的初始化程序调用了非指定的 初始化程序。
我会将呼叫切换到-initWithWindowNibName:owner:
,其中一个转到-initWithWindow:
(之后,我会手动设置所有者,我猜?);但我不知道如何直接从笔尖创建NSWindow
(或者如果这是正确的事情)。
编辑:我刚刚发现警告只是因为我在界面中将-init
标记为NS_DESIGNATED_INITIALIZER
而被触发。我可以删除该标签并且警告消失,但-init
是我事实上指定的初始化程序,所以我宁愿保留它。