私はいくつかのモデルをNSTableView
に挙げる簡単なアプリを持っています。ビューベースのNSTableViewに列(バインディング付き)をプログラムで追加しますか?
この表は、2列の完全な標準ビューベースの表であり、バインディングを使用してNSArrayController
によって生成されます。そのすべてはInterface Builderで設定され、期待どおりに動作します。
ここでは、プログラムでいくつかの列を追加し、これらの新しい列をモデルのさまざまなキーパスにバインドしたいと考えています。そしてそこに、私は立ち往生している。簡単のため
、この設定を前提としています
- Modelオブジェクトは1つだけNSStringのプロパティでプレーンオブジェクトです:
name
- AppDelegateがモデルの数を保持しているNSArrayのプロパティ(
models
)を持っていますインスタンス。 - NSArrayControllerの
content
は、アプリケーションデリゲートのmodels
配列にバインドされています。 - NSTableViewの
content
は、アレイコントローラのarrangedObjects
にバインドされています。 - 表の最初の列は
name
プロパティを表示するには、(IBに)バインドされている、すなわち列→テーブルセルビュー→静的なテキストテーブルビューセル→値は、テーブルセルのビューのobjectValue.name
これは、私が知る限り、簡単で、本によって、魅力的に機能します。
...どうすれば列を追加できますか?
プログラム的に列を追加するには(それをシンプルに保つために、ちょうどこの新しい列がもがちょうどそこにすでにだ列のように、name
プロパティを表示する必要があるとしましょう)、私はこのような何かをしたいと想像アプリデリゲート:
NSTableColumn* newColumn = [[NSTableColumn alloc] initWithIdentifier:@"newColumn"];
// do binding magic somehow
// [[newColumn dataCell] bind:NSValueBinding toObject:??? withKeyPath:??? options:nil];
[self.table addColumn:newColumn]; // the table's connected with an IBOutlet
のI /データセルに、テーブル、列、アレイコントローラ、アレイ自体、ならびにキーパスのすべての方法からの結合のように多くの組み合わせを試みたが、何も動作しません。新しい列はちゃんと追加されますが、一度も入力されません。
私が作成する基本的なNSTableColumnインスタンスは、ビューベースではなくセルベースであり、それは問題を引き起こしていると思います。しかし、私はここからどのように進むのか分かりません。プログラマチックに追加された列のバインドについては、ドキュメントでは決して話しません。
この場合、私が望むのは、私が簡単にIBを設定できるように、モデルにバインドされた単純なテキスト列です。
私はNSTableViewDataSource
を実装し、テーブルに "手動で"フィードすることでこれを行うことができましたが、他にもバインディングを設定しています。
ご協力いただければ幸いです。
申し訳ありませんが、動作しません。それを試してみました。列をバインドするのは、セルベースのテーブルに対してのみ機能します。ビューベースのテーブルではありません。 – Flambino