私はすでにこのテーマで1日を殺しましたが、これが正しい方法でどのように行われるのかまだわかりません。
私はNSOutlineView
ファイルシステム階層を表示するために使用しています。最初の列の各行について、チェックボックス、関連するアイコン、およびファイルまたはディレクトリの名前を表示する必要があります。これを行う標準的な方法がないため、NSTextFieldCell
SourceViewとPhotoSearchの両方の例を使用してサブクラス化しvalue
、IBをname
ツリーアイテムクラスのプロパティにバインドしましたNSTreeController
。チェックボックスと画像をペイントするためにオーバーライドを使用してdrawWithFrame:inView:
おり、テキスト描画をに転送していますsuper
。trackMouse:inRect:ofView:untilMouseUp:
チェックボックスの相互作用を処理するためにオーバーライドも使用しています。
copyWithZone:
カスタムセル内でマウスボタンを押すと、セルオブジェクトがコピーされ、この一時オブジェクトにtrackMouse:inRect:ofView:untilMouseUp:
メッセージが送信され、元のセルのチェック状態を変更できないことに気付くまで、すべてが順調でした。見る。
質問の主題はバインディングに関するものなので、これが答えかもしれないと思いましたが、この混乱をすべて接続して期待どおりに機能させる方法がまったくわかりません。これを試しました:
[[[treeView outlineTableColumn] dataCell] bind:@"state"
toObject:treeController
withKeyPath:@"selection.state"
options:nil];
しかし、まったく成功しませんでした。うまくいかないようです。
これは私が取った完全に間違った方法でしょうか?さらに読むためのより良い代替案またはリンクを提案できますか?
UPD 1/21/11:私もこれを試しました:
[[[treeView outlineTableColumn] dataCell] bind:@"state"
toObject:treeController
withKeyPath:@"arrangedObjects.state"
options:nil];
しかし、「[<_ NSControllerTreeProxy 0x ...> valueForUndefinedKey:]:このクラスはキー状態のキー値コーディングに準拠していません。」のようなエラーが発生し続けました。および同様。