45

私はCocoaをFile's Owner初めて使用し、.nibファイルの概念を理解していません。

これが私が物事を見る方法です:

  • myNibFile.nibウィンドウがどのように見えるかを説明するファイルファイルについて考えてみます。

  • ここで、実際のウィンドウをこの.nibファイルに接続します。そこで、myWindowのサブクラスであるクラスを作成しますNSWindowController。そして、この接続を行うために、次のinitようにメソッドを変更します。

         -(id)init
         {
             [super initWithWindowNibName:@"myNibFile"];
             return self;
         }
    

したがって、のインスタンスを作成するとmyWindow、「システム」が.nibファイルを調べて、適切なオブジェクトを作成することを理解しています。

だから、私の質問は:

  • File's Owner.nibファイルのを指定する必要があるのはなぜmyWindowですか?冗長ではないですか?

  • 私はそれが私が本当に何を理解していなかったことを意味すると思いFile's Ownerます。それは何ですか ?.nibファイルが何かに属している必要があるのはなぜですか?それは私の「アプリケーション」の「どこか」にあるのではなく、必要なときに「システム」がそこに行き、それを使用しますか?

これらの新しい概念をより明確に理解するのを手伝ってくれてありがとう!

4

4 に答える 4

67

覚えておくべき2つのポイント:

  • ファイル所有者は、nibをロードするオブジェクト、つまりメッセージloadNibNamed:またはを受信するオブジェクトinitWithNibName:です。
  • ロード後にペン先内のオブジェクトにアクセスする場合は、ファイル所有者にアウトレットを設定できます。

そのため、ボタンやサブビューなどがたくさんあるファンシーなビューを作成しました。ロードするオブジェクト(通常はビューまたはウィンドウコントローラー)からnibをロードした後、いつでもこれらのビュー/オブジェクトのいずれかを変更する場合は、これらのオブジェクトのアウトレットをファイル所有者に設定します。とても簡単です。

これが、デフォルトですべてのViewControllerまたはWindowControllerがファイル所有者として機能し、nibファイルにメインウィンドウまたはViewオブジェクトへのアウトレットがある理由です。あなたがそれにメッセージを送ることができるようにそれに出口を持っています。

ファイル所有者と呼ばれ、特別な場所が与えられている理由は、ペン先の他のオブジェクトとは異なり、ファイル所有者はペン先の外部にあり、ペン先の一部ではないためです。実際、ペン先がロードされたときにのみ使用可能になります。したがって、ファイルの所有者は、後でペン先をロードする実際のオブジェクトの代用またはプロキシです。

あなたが理解したことを願っています。質問があれば、ポイントを明確にします。

于 2013-03-07T07:17:05.570 に答える
10

理解しておくべき基本的なことは、Interface Builderを使用すると、プログラムの一部を操作しなくても、相互に自動的に接続されるオブジェクトを作成できるということです。非表示オブジェクトを含むすべての種類のオブジェクトをインスタンス化でき、それらは相互に関連付けることができます。たとえば、ビュー自体とともにテーブルビューデータソースのインスタンスを作成する場合があります。このメカニズムは通常、メインメニューNIB内にアプリケーションデリゲートを作成するために使用されます。

ただし、すべてドラッグアンドドロップで実行されるため、1つの例外を除いて、NIBオブジェクトとアプリケーションにすでに存在するオブジェクトとの間に接続を形成する方法はないようです。

コードがNIBファイルをロードしているときに、NIBが「ファイル所有者」と見なすオブジェクトを1つだけ指定するオプションがあります。これは、InterfaceBuilder内に表示されるプレースホルダーです。アプリケーション内の任意のオブジェクトを表すことができるため、InterfaceBuilderはそのオブジェクトで使用できるアクション/アウトレットを知ることができません。これが、[属性]タブでファイル所有者の「クラス」を変更できる理由です。

ファイルの所有者は、実際には「所有権」や「親権」を表すものではありません。それが表すのは「このNIBをロードしたオブジェクト」です。

于 2013-03-06T19:28:49.363 に答える
0

ファイルの所有者はIBのプレースホルダーであるため、コード内のすべてのアウトレットとアクションはIBで「リンク可能」です。コントロールドラッグして、画面上のものをコードに接続できます。

于 2013-03-06T15:39:24.163 に答える
0

Interface Builderのファイルの所有者は、親のオブジェクトタイプを認識できるようにするためのものです。これは2つの方法で使用されます。まず、Interface Builderで、接続に使用できるアウトレットとアクションをIBが認識できるようにします。次に、nibファイルがロードされた後、コードの残りの部分に再接続する方法を知るために、アプリケーションフレームワークによって使用されます。

于 2013-03-06T15:47:44.213 に答える