ペン先に表示されるカスタムオブジェクトのクラスIDではなく、ファイルの所有者のクラスIDを設定して、そこから接続する必要があるのはなぜですか?ファイルの所有者をnilに設定するとどうなりますか?私にとって、すべてがnilファイルの所有者で正常に機能するので、それからの接続を行う際の違いは何ですか?
3 に答える
NIBは、アーカイブされたオブジェクトグラフを表します。ロードすると、そのオブジェクトグラフが再構成されます。通常、新しくロードされたオブジェクトグラフを、プログラムの既存のオブジェクトグラフにフックする必要があります。あなたはそれが他のすべてから切り離されて、離れて立っていることを望まない。
新しくロードされたオブジェクトグラフをプログラムの残りのオブジェクトグラフに接続する方法はいくつかあります。1つの方法は、NIBで使用可能なプロキシオブジェクトのセットです。アプリケーションオブジェクト用に1つあります。別のそのようなプロキシオブジェクトはファイルの所有者です。プロキシオブジェクトは、NIBで表現されているものの、実際にはNIBに含まれていないものです。NIBの他のオブジェクトとは異なり、プロキシによって表されるオブジェクトは、NIBがロードされるときに作成されず、NIBがロードされる前に存在します。プロキシにより、これらの既存のオブジェクトとNIB内のオブジェクト間の接続が可能になります。これにより、NIBの新しいオブジェクトグラフをプログラムの既存のオブジェクトグラフに接続できます。
MainMenuNIBは珍しいです。これは、Cocoaによってアプリケーションの起動時に自動的にロードされます。つまり、既存のオブジェクトの邪魔になるものはほとんどありません(実際にはそうすることはできません)。そのNIBには通常、一種の調整コントローラーであるアプリデリゲートのインスタンスも含まれています。ただし、通常、他のタイプのNIBには調整コントローラーが含まれていません。(のような仲介コントローラーが含まれていますNSArrayController
が、それは異なります。)むしろ、調整コントローラーは通常、コードで作成され、多くの場合、NIBのロードを担当します。
たとえばNSWindowController
、ウィンドウの調整コントローラーとしてを使用します。ウィンドウはNIBで定義されます。ウィンドウコントローラーはコードでインスタンス化され(ウィンドウを作成する必要があると決定したコード)、NIBをロードします。それは、NIBのファイルの所有者でもあります。それは、NIBのウィンドウとトップレベルのオブジェクトを管理します。
ファイルの所有者をに設定している場合nil
、a)この時点で非常に単純なNIBを処理している可能性があり、b)ロードしたNIBからトップレベルのオブジェクトがリークしている可能性があります。
ファイルの所有者は、そのビューのすべてのIBOutletsとIBActionを含むファイルです。たとえば、クラス「ViewController」があり、それにとが含まれているIBOutlet UIButton *button
場合-(IBAction)changeViewWhenButtonPressed: (id) sender
、アウトレットとアクションを接続する唯一の方法は、「ViewController」をビューのファイルの所有者として設定することです。
クラスIDはファイルの所有者と同義であると私は比較的確信しています。
また、これらのリンクが役立つ場合があります。
「ファイルの所有者」は、ペン先内のオブジェクトがペン先外のオブジェクトを参照できる方法であり、その逆も同様です。(これを行うためのより複雑な方法もいくつかありますが、それほど頻繁には使用されません。)それを行う必要がない場合は、ファイルの所有者を使用する必要はありません。
メインアプリの場合、ファイルの所有者はApplicationオブジェクトです。すべてのアプリケーションロジックがnibでインスタンス化されたカスタムクラスにあり、アプリケーションに送信されるアクションメッセージに「ファーストレスポンダー」を使用する場合は、接続する必要がない場合があります。これで結構です。
ドキュメントウィンドウやポップオーバーなどがある場合は、ファイルの所有者が表示されているオブジェクトであることが多いため、UIを添付できると便利です。同じペン先を何度もロードする場合があり、それぞれがそのクラスの異なるインスタンス(異なるドキュメント、検査対象オブジェクトなど)によって「所有」されます。
(基本的に、ファイルの所有者は、nib-loadingメソッドの「owner:」パラメーターに渡されたオブジェクトです。)