1

書けるようになりたいです

id foo = [MyObject new];
foo.bar = [NSObject new];

しかし、次のエラーが表示されます。

/blah/blah/blah/Blah.m:32:9: error: property 'bar' not found on object of type '__strong id'
foo.bar = [NSObject new];
    ^
1 error generated.

clang は抑制できる警告を報告しないので、この動作は永続的であると思いますが、誰かが別の方法で教えてくれることを願っています。

明らかに、これがデフォルトで壊れることはわかっていますが、動的メソッド解決を使用して機能させる予定です。

4

2 に答える 2

3

このような汎用オブジェクト ポインターでドット構文を使用することはできません。

その理由は、コンパイラが に書き換えるfoo.bar = baz;から[foo setBar:baz]ですが、setter の名前を に変更@property (strong, nonatomic, setter=setListOfApples:) NSArray * listOfOranges;できるため、プロパティ宣言が表示されるはずです

標準のメッセージ送信構文を使用する場合、これは機能します。つまり、プロパティのセッターを検索できるようにオブジェクトの正確なタイプをコンパイラーに伝えるか、使用する正確なセッター名をコンパイラーに伝える必要があります。

于 2012-10-03T16:38:52.173 に答える
-2

@dynamic はそれを処理しますか?

@dynamic foo; @動的バー;

于 2012-10-03T16:18:58.557 に答える