北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

バインディングむずい(2)

だいぶ理解できた。



一番わからなかったのが、サンプルでNSArrayControllerからモデルをバインディングするってところだったんだけど、これはビューとコントローラのバインディングには関係がない作業。何のためにするかと言うと、コントローラの先にぶら下がる操作対象を、動的に変えるためのものであり、操作対象が一つしかないときは単にInterfaceBuilderのOutletでつなげばそれで十分だ。つまり、あのサンプルに従った場合、二カ所でバインディングを使っていることになる。



また、コントローラを使わずに直接モデルオブジェクト名にバインディングをしても、動作はできる。この方がバインディングの概念は理解しやすい。それなのに、なぜNSControllerを噛ませるかはドキュメントに書いてある。



  • NSController インスタンスは、現在の選択値とプレースホルダ値を管理します。したがって、コントローラの選択が null の場合や、選択が複数ある場合にも、ビューに適切な値を表示できます。

  • NSController(およびバインディングをサポートする Application Kit ユーザインタフェース要素)は、NSEditor プロトコルおよび NSEditorRegistration プロトコルを実装します。NSEditorRegistration プロトコルは、未保存の変更があった場合に、エディタ(ビュー)がそのことをコントローラに通知する手段となります。NSEditor プロトコルは、保留中の編集をレシーバが保存または破棄するよう要求する手段となります。これらの手段は通常、ユーザインタフェース要素を対象としてコントローラによって呼び出されます。しかし、ユーザによる文書保存操作やアプリケーション終了操作に対応してコントローラに送信することもできます。