2

これが私のセットアップです。

私のアプリケーション デリゲートには、currentFoo というプロパティがあります。currentFoo プロパティは、現在選択されている Foo インスタンスに設定されます。Foo インスタンスにはそれぞれ、結果と呼ばれる NSMutableArray であるプロパティがあります。結果のオブジェクトは、NSNumber、NSString など、さまざまなタイプにすることができます。

特定の時間に表示される NSTableView があり、ユーザーは currentFoo で結果のコレクションを確認できます。結果への追加と削除を可能にする UI もあります。

NSTableView には、NSArrayController の ArrangeObjects コントローラー キーにバインドされた単一の列があります。このバインディングで使用される NSValueTransformer サブクラスを作成して、結果配列で見つかったさまざまな可能な型を、表の列に表示する文字列表現に変換します。

NSArrayController のコンテンツ配列バインディングは、モデル キー パスとして currentFoo.results を使用して、NSObjectController の選択コントローラ キーに接続されます。最後に、NSObjectController はアプリケーション デリゲートからコンテンツを取得します。

これはすべてうまく機能し、 NSTableView で currentFoo.results を追加、削除、表示することは、私が望むように機能します。

私の問題は、テーブル ビューのコンテンツを編集しようとするときです。逆変換を許可するように NSValueTransformer サブクラスを設定し、reverseTransformedValue: を実装しました。コードをステップ実行すると、NSTableView 行の値を編集すると、値トランスフォーマーのメソッドに正しく送信され、変換されて返されることがわかります。

次に、バインディングが逆変換された値でモデルを更新しようとすると、エラーが発生します。

Cocoa バインディング: オブジェクト 0 のキー パスの値の設定エラー (バインドされたオブジェクト (null) から): [setValue:forUndefinedKey:]: このクラスは、キーのキー値コーディングに準拠していません。

したがって、基本的にはこの配列がテーブル ビューにバインドされており、ユーザーが行を編集するときに、文字列を適切なオブジェクトに変換したいと考えています。Cocoaバインディングでこのエラーが発生したため、NSTableColumnバインディングのキーパスに何かを設定する必要があると思いますが、何がわからないのですか。「自己」を試しましたが、うまくいきませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

2

モデルキーを空にすることはできません。そのため、エラーメッセージが表示されます。

結果オブジェクトをプリミティブオブジェクト(文字列、ボックス化された数値など)からモデルオブジェクト(クラスFooResultの)に変更し、バインディングのモデルキーパスを、テーブルビューを持つモデルオブジェクトのプロパティの名前に設定します変異します。

基本的に、プリミティブオブジェクトの配列に直接バインドすることはできません。モデルオブジェクトの配列のいくつかのプロパティにバインドする必要があります。

于 2009-01-03T23:56:36.313 に答える