1

Cocoa Bindings を使い始めたばかりで、最初のアプリケーションに取り組んでいます。

多くのサンプルや書籍では を使用していますNSArrayControllerが、単一のオブジェクトとそのプロパティをいくつかのテキスト フィールドにバインドしたいだけなので、 を使用しましたNSObjectController。また、ドキュメントベースのアプリケーションも持っていません。私のアプリケーションは単純な 1 ウィンドウ アプリケーションです。

NSObjectControllerすべてのサンプルが行ったように、ファイル所有者にバインドしようとすると、問題が発生し始めます。これを行うと、アプリケーションをコンパイルできません。「このクラスはキー値に準拠していません」というエラーが常に表示されます。
しかしNSObjectController、アプリケーションの AppController インスタンスにバインドすると、完全に正常に動作します。Textfield を のフィールドにバインドすることもできましたNSObjectController。これも正常に機能します。

しかし、正しいことをしているかどうかはわかりません。私が見つけたすべてのサンプルは、ファイルの所有者にバインドされています。これは、私のアプリでは機能しませんでした。Application Controller へのバインドは、非ドキュメント ベースのアプリケーションに最適な方法のようです。

4

2 に答える 2

3

NSObjectControllerのバインディングをバインドするcontentObjectと、編集するオブジェクトを見つける方法をコントローラーに伝えることになります。これは Key-Value Coding を使用して行われます。この場合、文字列を使用して多数のオブジェクト関係をナビゲートし、値を見つけます。[object valueForKeyPath:keyPath]実行時に、オブジェクト コントローラーは、コントローラーをバインドしたオブジェクトと、Interface Builder で指定したキー パスを使用して呼び出します。

Interface Builder の File's Owner アウトレットはowner、NIB のロード時に指定されたオブジェクトを参照します。ドキュメントベースのアプリケーションでは、これは通常NSWindowController. ドキュメント以外のアプリケーションでは、通常、ファイルの所有者はNSApplicationインスタンスです。しかし、あなたは をサブクラス化しませんでした (またそうすべきではありません)NSApplicationため、アプリケーションでは、ファイルの所有者はオブジェクトを探すのに適切な場所ではありません。

代わりに、アプリケーション デリゲートにオブジェクトを追加した可能性が高いため、ドキュメント ベースではないアプリケーションでオブジェクト コントローラーをアプリケーション デリゲートにバインドすることは理にかなっています。提案として、あなたが取り組んできた前の例に戻って、これらのオブジェクト コントローラがコンテンツ オブジェクトを見つける方法を理解できるかどうかを確認してください。オブジェクト コントローラーとそれが制御するオブジェクトとの間の接続を確認すると、バインディングがより理解できるようになります。

于 2009-10-15T13:45:41.450 に答える
0

ObjectController をオブジェクトにバインドします。ペン先が 1 つのドキュメント以外のアプリケーションで作業している場合、ファイルの所有者は NSApplication のインスタンスになります。

ファイルの所有者へのバインドを特別なものと考えないでください。これは、nib オブジェクトの所有者のプレースホルダーにすぎません。これは、nib ファイルのインスペクターで確認できます。適切なオブジェクトにバインドします。

于 2009-10-15T09:44:30.150 に答える