0

我正在开发一个基于文档的应用程序。我正在为文档窗口使用专用的窗口控制器,并调用该-[NSDocument makeWindowControllers]方法。

我的窗口控制器是这样初始化的:

- (instancetype) init
{
    if (self = [super initWithWindowNibName:@"Document" owner:self]) {

    }

    return self;
}

这里@"Document"是包含与项目一起创建的主文档窗口的 .xib 文件。

这里的基本原理是,这个窗口控制器总是用这种类型的窗口初始化,所以参数是硬编码的,并且隐藏在实现中-init(同时也方便地将窗口所有者设置为self)。

因此,实例化窗口控制器的一方(在我的例子中是文档类)不需要担心要使用哪个 nib,只需调用-init.

问题是,我破坏了指定的初始化器链,Xcode 抱怨这些警告:

未找到超类“-initWithCoder:”的指定初始化程序的语义问题方法覆盖。

语义问题指定初始化程序缺少对超类的指定初始化程序的“超级”调用。

未找到超类“-initWithWindow:”的指定初始化程序的语义问题方法覆盖。

语义问题 指定初始化程序调用了非指定初始化程序。

我会-initWithWindowNibName:owner:用一个来切换调用-initWithWindow:(然后手动设置所有者,我猜?);但我不知道如何NSWindow直接从笔尖创建一个(或者这是正确的做法)。

编辑:我刚刚发现警告被触发只是因为我在我的界面中标记-init为。NS_DESIGNATED_INITIALIZER我可以删除该标签并且警告消失,但这-init 我事实上指定的初始化程序,所以我宁愿保留它。

4

0 回答 0