2

次の場合:
-ドキュメントベースのアプリケーションプロジェクトを作成します。
-私がCustomViewと呼ぶNSViewから継承するクラスを作成します。
-ビューをdocument.xibにドラッグし、そのクラスをCustomViewに設定します。
-ビューをドキュメントに接続します。これをcustomViewと呼びます。
-ドキュメントにIBActionを追加します。これをFooと呼びます。
-mainmenu.xibファイル内のこのIBActionをメニュー項目に接続します。

次に、IBAction内では、すべてのアウトレットはnilです。

- (IBAction) Foo: (id) sender
{
    NSLog(@"%p",customView);
}

0x0を出力します。
この問題は、すべてのIBOutletで発生し、IBActionがメニュー項目にリンクされている場合にのみ発生します。代わりにインスタンス変数を出力しようとすると、正しい値になります。

4

1 に答える 1

3

Documentで新しいオブジェクトを作成しないでください。作成するのは、開いている実際のオブジェクトとはまったく関係のないMainMenu.xib新しいオブジェクトを作成することだけです(したがって、のnil値)。DocumentDocumentcustomView

の代わりに、でアクティブDocumentオブジェクトを取得するには、指定しcustomViewたメニュー項目を-AppKitに接続します。他のレスポンダーが処理しない場合、AppKitはアクションメッセージをチェーンの上位でアクティブサブクラスに自動的に渡します。たぶん、イベント処理ドキュメントの「アクションメッセージ」を読んでください:(参照)。IBActionFirst ResponderDocument

于 2012-08-05T19:44:52.320 に答える