0

選択したテーブル行を詳しく説明するパネルがあります。明らかに、パネルの表示は頻繁に更新する必要があり、私はそのタスクをNSWindowControllerサブクラスにプッシュしました。

カスタムNSWindowControllerに@property、テキストフィールドの文字列値やNSImageViewsの画像値などのsを設定したいと思います。アクセサーに新しいコードは必要ないので、必要です@synthesize。残念ながら(私にとって)、でキーパスを使用するオプションはありません@synthesize property=ivar

明らかな解決策は、フォームの独自のアクセサーを作成することです

- (void)setTitle:(NSString *)title
{
    [titleTextField setStringValue:title];
}

- (NSString *)title
{
    return [titleTextField stringValue];
}

しかし、いくつかのプロパティのそれぞれについて、手動で行う必要はありません。

もっと簡単な方法はありますか?objectValueおそらく、別のオブジェクトの特定のプロパティ(実際には適切なプロパティではないなどを除く)に転送するようにプロパティを設定する一般的な方法ですか?

4

3 に答える 3

1

クラスにvalueForUndefinedKey:を実装する場合、キーと値のパスルックアップを解決し、それらをすべて他のオブジェクトに転送する最後のチャンスを得る必要があります。ただし、これは確かにパフォーマンスが高くなく、渡すプロパティ名のほとんどがターゲットオブジェクトのプロパティ名と一致する場合にのみ、大幅な向上が得られます。

于 2010-11-28T19:14:22.037 に答える
0

テキストフィールドのプロパティ名はクラスのプロパティ名とは異なるため、転送を行うことは役に立たないと思います。

文字列プロパティを公開してテキストフィールドから抽象化することはもちろん良い考えですが、このボイラープレートの記述を避けたい場合は、テキストフィールド自体をプロパティとして公開するだけでもかまいません。これは、一部のApple APIで確認できます。特に、SDK 3.0ではtext、テーブルセルのようなプロパティではなく、現在のiPhoneで確認できますtextLabel。呼び出し先が何らかの方法でラベルまたはテキストフィールドをカスタマイズしたい場合は、よりシンプルでより多くのカスタマイズが可能です。

于 2010-11-28T19:32:42.443 に答える
0

矛盾があります。アクセサーに新しいコードは必要ないので、それらを合成したいと言いますが、必要なコードは完全に新しいものです。プロパティは、いくつかの一般的なケースの構文糖衣ですが、これは1つではありません。

あなたが望むことをするためのいくつかの方法があります、例えば。@Justinがsetvalue:forundefinedkeyのオーバーライドを提案しているように:-フォワードターゲットのルックアップが必要なだけですが、プロパティの砂糖はこれに適していません。

于 2010-11-28T23:41:51.170 に答える