2009-05-24 9 views
0

私はNSArrayControllerの値にバインドしているテーブルの列を持っています。私がしようとしているのは、アレイコントローラーの実際の値の部分文字列だけを表示することです。これまでにやっている方法は、サブクラスNSValueTransformerを作成し、次にtransformedValueメソッドで文字列操作を行うことです。しかし、私は入力値を文字列に変換する方法を理解することはできません(タイプはNSConcreteValueです)、値の変圧器なしでこれを行う簡単な方法があります。NSValueTransformerで文字列操作を行う方法は?

+0

NSConcreteValueはNSValueのサブクラスです。バインディングはトランスフォーマなしで完全な文字列を正しく表示しますか? –

+0

はい - 文字列が変圧器なしで正常に表示されています。 – Charles

答えて

2

プレゼンテーション側の書式設定のように聞こえる場合は、代わりにフォーマッタを使用する必要があります。

また、複数の値(「42から100」など)を含む文字列の場合は、代わりにモデルオブジェクトを作成してアレイコントローラに格納する必要があります。次に、テーブル列をモデルオブジェクトの特定のプロパティにバインドし、文字列を選択してから再アセンブリすることを心配する必要はありません(モデルをロードして後で保存する場合を除く)。

編集:気にしないでください。オブジェクトの値がNSStringではなくNSStringであることはわかりませんでした。

+0

これは長い文字列です。最初の10文字しかテーブルに表示しません。 Interface Builderのバインディングインスペクタから何かできることがあるフォーマッタを使用していますか? – Charles

+0

これは拘束力のあるオプションではありません。それはセル内のコンセントです。ペン先でフォーマッタを作成し、セルのフォーマッタコンセントをフォーマッタオブジェクトに接続します。 –

+0

合意。ここでサブクラス化したいのはNSFormatterです。 -stringForObjectValue:を実装するだけで済みます。おそらく完了します。 –

1

-descriptionメソッドを使用して任意のオブジェクトの文字列表現を取得できますが、NSValueのインスタンスでは特に意味のあるものは表示されません。言い換えれば、渡されたオブジェクトを解釈して文字列を生成するのは、バリュートランスフォーマーだけです。それがNSValueインスタンスの場合、問題はインスタンスに含まれるデータのタイプです。そのことが分かれば、コードを文字列として表現するコードを書くことができます(NSStringFromRect()に似ています)。