ドキュメントベースのアプリを開発しています。ドキュメント ウィンドウ専用のウィンドウ コントローラーを使用して、-[NSDocument makeWindowControllers]
メソッドを呼び出しています。
ウィンドウコントローラーは次のように初期化されます。
- (instancetype) init
{
if (self = [super initWithWindowNibName:@"Document" owner:self]) {
}
return self;
}
@"Document"
これは、プロジェクトで作成されたメイン ドキュメント ウィンドウを含む .xib ファイルです。
ここでの論理的根拠は、このウィンドウ コントローラは常にこのタイプのウィンドウで初期化されるため、パラメータはハードコードされ、実装内に隠されているということです-init
(また、ウィンドウの所有者を に便利に設定しますself
)。
したがって、ウィンドウ コントローラ (私の場合はドキュメント クラス) をインスタンス化する側は、どの nib を使用するかを気にする必要はなく、単に を呼び出すことができます-init
。
問題は、指定された初期化子チェーンを壊していて、Xcode が次の警告を表示することです。
セマンティックの問題 スーパークラス '-initWithCoder:' の指定された初期化子のメソッド オーバーライドが見つかりません。
セマンティックの問題 指定された初期化子に、スーパー クラスの指定された初期化子への「スーパー」呼び出しがありません。
セマンティックの問題 スーパークラス '-initWithWindow:' の指定された初期化子のメソッド オーバーライドが見つかりません。
セマンティックの問題 指定されたイニシャライザが、指定されていないイニシャライザを呼び出しました。
への呼び出しを-initWithWindowNibName:owner:
1 に切り替えます-initWithWindow:
(その後、所有者を手動で設定しますか?); しかし、ペン先から直接作成する方法がわかりませんNSWindow
(または、これが正しいことなのかどうか)。
編集:インターフェイスでラベル-init
を付けたためにのみ警告がトリガーされていることを発見しました。NS_DESIGNATED_INITIALIZER
そのラベルを削除すると警告は消えますが、-init
事実上の指定された初期化子であるため、保持したいと思います。