20

MVCアプリケーションがあります。モデルには、構造体であるプロパティがありますNSSize。このように書くことができます:

- (void)setSize:(NSSize)aSize;

ビューは、NSSizeKey-Valueコーディングを使用してこれを設定します。ただし、構造体をKey-Valueコード化することはできないため、次のNSValueように-objectでラップしました。

[theView setValue:[NSValue valueWithSize:mySize]
           forKey:@"theModel.size"];

私の理解では、アクセサは構造体ではなく構造体を期待しているため、これは機能しないはずNSValueです。しかし、それは完全に機能します。魔法のように。

これはどのように可能ですか?

4

1 に答える 1

12

「構造体のラッピングとアンラッピング」まで下にスクロールしますが、要点は次のとおりです。

setValue:forKey:指定されたキーの適切なアクセサーまたはインスタンス変数に必要なデータ型を決定します。データ型がオブジェクトでない場合、値は適切な-<type>Valueメソッドを使用して渡されたオブジェクトから抽出されます。

ところで、この質問をしてくれてありがとう!これは常に「うまくいった」カカオ豆の1つであり、それがどのように達成されたかが明らかではないと私は考えたことはありませんでした。

于 2010-03-22T20:48:37.890 に答える