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:1 に切り替えます-initWithWindow:(その後、所有者を手動で設定しますか?); しかし、ペン先から直接作成する方法がわかりませんNSWindow(または、これが正しいことなのかどうか)。

編集:インターフェイスでラベル-initを付けたためにのみ警告がトリガーされていることを発見しました。NS_DESIGNATED_INITIALIZERそのラベルを削除すると警告は消えますが、-init 事実上の指定された初期化子であるため、保持したいと思います。

4

0 に答える 0