甘くないシュガー


こちらを拝見して「バーゲン教師」なるアプリを作りましたよ☆
たいへん丁寧でわかりやすい説明でサンプルアプリ作成の完成に成功しました。エミュレータ上で動いたときは「おぉー」と感動。
この感動大事にしたいです。


で、この作業をするにあたっての気づいた点を2点。

ソースコードの誤植??

- (IBAction)pushAddCart:(id)sender {
    [cartPrice setText:[NSString stringWithFormat:@"%d", ];
}
目指せ!iPhoneアプリ開発エキスパート:第8回 アプリの完成を目指して|gihyo.jp … 技術評論社

このままでは動かなかったのでこのように書き換えました。

- (IBAction)pushtAddCart:(id)sender {
    [cartPrice setText:[NSString stringWithFormat:@"%d", [[cartPrice text] intValue] + [[priceNew text] intValue]]];
}

setTextというメソッドはドキュメントのどこにある??

上記でも記述されているsetTextというメソッド、UILabel -> UIView -> UIResponder -> NSObject
デベロッパドキュメントのリファレンスを順に追っていっても全然みつからない・・・。
で、ようやく事の真相が判明。

プロパティへのアクセス

ドット構文を使うと、構造体の要素にアクセスするときと同じパターンを使ってプロパティにアクセスできます。

MyClass *myInstance = [[MyClass alloc] init];
myInstance.value = @"New value";
NSLog(@"myInstance value: %@", myInstance.value);

ドット構文は単なる「シンタックスシュガー」であり、コンパイラによってアクセサメソッドの呼び出しに変換されます(そのため実際にはインスタンス変数に直接的にアクセスするわけではありません)。上記のコード例は、次のコードと完全に同じです。

MyClass *myInstance = [[MyClass alloc] init];
[myInstance setValue:@"New value"];
NSLog(@"myInstance value: %@", [myInstance value]);
Objective-C 2.0プログラミング言語: 概要 #プロパティへのアクセス

とのこと。えらい時間がかかってしまった。
"必要になったときに必要なことを調べる"「遅延学習法」のネガティブな面が露呈。
というよりも、調べるのが下手ってことかな??
「まずは原典にあたれ」という基本を再確認。