頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


id型のオブジェクトのプロパティへアクセスできない?

似たようなクラスが複数あってそのどれかへ同じメッセージを送りたい場合に困ったことがあったのでメモ。

例えばViewController1とViewController2ってクラスがあって、それらのオブジェクトがviewController1とviewController2とするよ。どちらのクラスにもhoge、fooなんてプロパティがあるんだ。
{
    if (flag) {
        viewController1.hoge = hoge;
        viewController1.foo = foo;
    } else {
        viewController2. hoge = hoge;
        viewController2.foo = foo;
    }
}
↑このように条件によって送り先は違うんだけど、同じプロパティにアクセスして同じ値を設定したい場合。
ここでは二つのプロパティしか書いてないけどこれがたくさんあったらなんだか無駄と思うじゃない?
すると当然先に参照を得ておいて、それからプロパティのセットをしてやろうってなるよね。

それで書き直したのがこれ↓
{
    id targetViewController;
    if (flag) {
        targetViewController = viewController1;
    } else {
        targetViewController = viewController2;
    }

    targetViewController.hoge = hoge;
    targetViewController.foo = foo;

}
このようにid型でtargetViewControllerで参照を得ておけばいいよね、と思ったんだけどこれだとXcodeはエラーをだしてビルドしてくれないんだ。

Property not found on object of type 'id'
Property 'hoge' not found on object of type 'id'

id型のオブジェクトにはhogeなんてプロパティはございませぬ、だと、、、?
バカヤロー、なんのためにidでやってると思ってんだよ!って言いたくなるけどXcodeにいくら言ってもビルドしてくれないんじゃしょうがない、ここは書き直して、、、
{
    [targetViewController setHoge:hoge];
    [targetViewController setFoo:foo];
}
このようにドット記法をやめてセッターでプロパティへアクセスするとエラーじゃなくなる。そうなのー?って気がしないでもないんだけど、そういうものみたい。

<< 定点での傾きが決まってる場合のn次曲線近似を最小二乗法で求める(1)   TopPage  返り値の型が一致してないだと? >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/791-d5aa1b3a




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad