DRYな備忘録

Don't Repeat Yourself.

Use of undeclared identifier 'display' 【iOSの教科書】【Xcode4.6】【iPhone】【Objective-C】

【問題】

iOSアプリ作ろうとしてる。iOSの教科書を見てしこしこやってる。言われた通りにやってると思うんだけど、

Use undelclared identifier 'display'; did you mean '_display'?

てエラーが出る。これ↓f:id:otiai10:20130511220058p:plain

えー、言われた通りにやってるyo-。

証拠これ↓「iOSの教科書」より抜粋

f:id:otiai10:20130511232230p:plain

 

ね。

【解決】

なんか納得いかねぇけど、当該部分を、エラーメッセージのご助言通りに、

- (IBAction)add {
    count = count + 1;
    // display じゃなくて _display
    _display.text = [NSString stringWithFormat:@"%d", count];
}

で、ビルドしたら正常に動作した

【調査】

iOSの教科書のコードでは display でアクセスできるみたいな感じで書いてあったのに何でなん(´・ω・`)、と思って調べた

ググりワード

Hit

これか

  • 変数ごとにいちいちアクセッサかいてたら面倒なので、@propertyという仕組みが用意されている。
    • Objective-C 2.0から@propertyや@synthesizeが導入された。
    • プロパティを宣言すれば、アクセサメソッドとインスタンス変数が自動的に生成される
    • 特に指定しなければ、合成されるインスタンス変数の名前は、プロパティ名の先頭にアンダースコアを置いたものになる

なるほど。

前述、「iOSの教科書」には

[注釈] 本書では、OS X 10.7 (OS X Lion)または、OS X 10.8 (OS X Mountain Lion)がインストールされたMacを使って開発を行う。Mac OS X 10.6 (Snow Leopard)がインストールされたMacの場合は、一部の手順が異なることがある。また、一部の機能が利用できないため、15章のサンプル・コードは動作しない。

とある。ちなみに僕のPCは、

OS X 10.8.2

f:id:otiai10:20130511224511p:plain

Wikipedia - OS X

Moutain Lionじゃないんスか。これでLeopardとかだったら納得できたんだけど。ワカンネ。Objective-Cのバージョンってどうやって調べんの。

【結論】

とりあえず

Use of undeclared identifierのエラーが出たときは以下のことを疑うべし

  • ちゃんとヘダーファイルの方(.hの方)で宣言してます?
  • 宣言したのの呼び出し方( _hoge とか hoge とか)合ってます?

【雑感】

最近、無力感ぱねぇw

ダメ人間臭ぱねぇw

 

DRYな備忘録として