web-dev-qa-db-ja.com

ファイルの所有者とは(Interface Builderで)何ですか?

Cocoaは初めてで、.nibファイルのFile's Ownerの概念が理解できません。

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

  • ウィンドウがどのように見えるかを記述するファイルmyNibFile.nibファイルを考えてください。

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

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

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

だから、私の質問は:

  • .nibファイルのFile's OwnermyWindowであることを指定する必要があるのはなぜですか?冗長ではありませんか?

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

これらの新しいコンセプトをより明確に理解するのを助けてくれてありがとう!

35
Colas

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

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

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

これが、デフォルトですべてのView ControllerまたはWindow Controllerがファイル所有者として機能し、nibファイルのメインウィンドウまたはビューオブジェクトへのアウトレットも持っている理由です:何かを制御している場合あなたがそれにメッセージを送信できるように、それにアウトレットを持っています。

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

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

59

理解すべき基本的なことは、Interface Builderを使用すると、プログラムの手間をかけずに、自動的に相互に接続されるオブジェクトを作成できることです。ビュー以外のオブジェクトを含むすべての種類のオブジェクトをインスタンス化でき、相互に関連付けることができます。たとえば、ビュー自体とともにテーブルビューデータソースのインスタンスを作成できます。このメカニズムは、メインメニューNIB内でアプリケーションデリゲートを作成するために一般的に使用されます。

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

コードがNIBファイルをロードするとき、NIBが「ファイル所有者」と見なすオブジェクトを正確に指定するオプションがありますone。これは、Interface Builder内に表示されるプレースホルダーです。アプリケーション内の任意のオブジェクトを表すことができるため、Interface Builderはその上で利用可能なアクション/アウトレットを知ることができません。これが、属性タブでファイル所有者の「クラス」を変更できる理由です。

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

7
Jeff Laing

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

0
iain

File's OwnerはIBのプレースホルダーであるため、コード内のすべてのアウトレットとアクションはIBで「リンク可能」であり、Ctrlキーを押しながらドラッグして画面上のものをコードに接続できます。

0
bbaassssiiee