0

NSWindowControllerから新しいクラスを継承してwindowDidLoadを実装し、NIBで定義されたウィンドウコントロールにアクセスしました。

- ( void ) windowDidLoad
{
   NSArray * controls = [ [ [ self window ] contentView ] subviews ];
   int i;

   NSRunAlertPanel( @"windowDidLoad", @"", @"OK", NULL, NULL );

   if( [ controls count ] == 0 )
      NSRunAlertPanel( @"no hay controles", @"", @"OK", NULL, NULL );   

   for( i = 0; i < [ controls count ]; i++ )
      NSRunAlertPanel( @"control", @"", @"OK", NULL, NULL );   
}

コードの実行はうまくいきます。NIBウィンドウが表示されますが、サブビューには要素がありません。ウィンドウの子コントロールにアクセスする方法は?ありがとう、

4

1 に答える 1

1

NIB ウィンドウが表示されますがsubviews、要素はありません。

窓のコンセントを窓に接続するのを忘れた可能性があります。コンセントが接続されていない場合、コンセント プロパティは を保持するnilため、 を[self window]返しますnil

次に、 にメッセージを送信しますnil。「メッセージ」と言うのは、へのすべてのメッセージが何もせず、必要に応じて、、またはをnil返すnil00.0ためです。つまり、 にメッセージを送信するcontentViewnil、 が返されます。これは、 にメッセージをnil送信したことを意味し、 も を返します。subviewsnilnil

私が言ったように、へのメッセージは、、または;をnil返します。にメッセージを送信すると、は前の段落で説明したとおりであるため、そのメッセージは を返します。nil00.0countcontrolscontrolsnil0

解決策は、IB でペン先を開き、コントローラーのwindowコンセントをウィンドウに接続することです。

ところで、インデックスを使用して NSArray をループするべきではありません。それを行うためのよりシンプルでクリーンな方法があります: Fast Enumeration

于 2010-07-18T03:23:33.860 に答える