2010年10月31日日曜日

Inspectorに変数が表示されない

基礎から学ぶ iPhoneアプリ開発
  • 作者: 林 晃
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2010/07/24
  • メディア: 単行本(ソフトカバー)

久しぶりに、iPhone SDKを触ってみました。
書籍だけは沢山そろっているのに、まだひとつもアプリが完成していない。。。

というわけで、@ITのiPad/iPhoneアプリ開発の勘所の「SDKで始めるiPad/iPhoneアプリ開発の勘所(2) Xcode/Interface BuilderでUI設計+イベント処理」を見ながらサンプルアプリを作ってみました。

途中、"あらかじめ用意しておいた「bg-green.jpg」を選択して、[追加]を押します。"という記述に、"あらかじめ用意"しておけってどこにも書いてないじゃないかと(笑)ムッとしながら慌てて適当なjpegファイルを探したものの、ほぼ順調に最後のページまでたどり着きました。

ソースもきちんとコピペ(笑)したので、コンパイルは通ります。

が、最後のページのIBOutletとUI部品の接続するところで、"Inspectorの[Connections]を選択すると、[Outlets]に「BMICalcViewController.h」でIBOutlet付きで宣言したインスタンス変数がすべて表示されています。"と記載されているのですが、Inspectorの[Connections]がコーディング前と何も変わっていなくて、「BMICalcViewController.h」でIBOutlet付きで宣言したインスタンス変数がひとつも(ま、ひとつだけ出でも困りますが)表示されていません。








困った。。。

色々調べましたが「独学で作成!!金儲けiphoneアプリ」によると、


---
Outlet,Actionを追加する方法は2つある
1.インスペクタから追加
2.「.h」ファイルに直書き

とのこと。

で、インスペクタから追加しようと思いましたが、よくよく考えてみると既にソース「.h」にOutletの記述は追加しているので、それがInspectorに反映されていない原因を調べなくてはならないわけで。。。

。。。

基礎から学ぶ iPhoneアプリ開発」で調べてもわからないし。。。



Objective-C逆引きハンドブック
  • 作者: 林 晃
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2010/02/26
  • メディア: 単行本(ソフトカバー)

6 コメント:

ジャマ さんのコメント...

こんにちは、「独学で作成!!金儲けiphoneアプリ」の作者のジャマと申します。
ブログ読んで頂きありがとうございます。

Inspectorの件は解決しましたか?

ソースの写真を見たのですが、たぶん.hファイルの@propertyの後にIBOutletが書いてないからだと思います。

@property (nonatomic, retain) IBOutlet UITextField *heightText

とやればできると思います。
古いSDKではこの書き方でインスペクタに表示されたのですが、若干ルールが変わったそれで表示されなかったんだと思います。

わからないことあったらアメブロにコメントでも付けて下さい。

sakitamu さんのコメント...

ジャマ様
書き込みありがとうございます。まさか著者の方からコメントをいただくとは。。。感激です。

ところで、アドバイスいただいたように@propertyの後にIBOutletを追加してみたのですが、やはりInspectorには表示されません。

@property (nonatomic, retain) IBOutlet UITextField *heightText

と書いた場合、UITextFieldが紫色になるはずだと思うのですが、黒いままなのが気になります。。。

ジャマ さんのコメント...

お疲れ様です。ジャマです。

まじですか!!
う〜ん、それだと原因がわかりませんねえ。

今手元でプロジェクト作って操作したら
insepectorにoutletが表示されました。

手順になります。

①xcodeの新規プレジェクトを作成する
②View-basedApplicationを選択
③できたプロジェクトのViewController.hをクリック
④.hファイルの@interface以下に変数を記述
@interface outletViewController : UIViewController {

UITextField * heightText;
UITextField * weightText;
UIButton * calcButton;
UIButton * resetButton;
UILabel * resultLabel;

}

@property (nonatomic, retain) IBOutlet UITextField * heightText;
@property (nonatomic, retain) IBOutlet UITextField * weightText;
@property (nonatomic, retain) IBOutlet UIButton * calcButton;
@property (nonatomic, retain) IBOutlet UIButton * resetButton;
@property (nonatomic, retain) IBOutlet UILabel * resultLabel;

@interface{}内ではIBOutletと記述する必要はないと思います。あと、自分のソースも@propertyのUITextFieldは黒い文字だったので問題はなさそうです。

⑤更新を保存します。
⑥ViewControllerのinspectorを確認

この操作を自分の環境で行ったところinspectorに表示されました。

ソースを変更している間にどこか変なところを変更したりしてしまったのでしょうかね〜。

とりあえず、新規にプロジェクトを作りなおしてみるのはどうでしょうか?

お役に立てず申し訳ないです。

sakitamu さんのコメント...

ジャマ様
色々とありがとうございます。大したコーディング量ではないので、思い切ってプロジェクトごと作り直してみましたが、駄目でした。
とりあえずは「SDKで始めるiPad/iPhoneアプリ開発の勘所(2) Xcode/Interface BuilderでUI設計+イベント処理」に沿ってやるのはあきらめます。

匿名 さんのコメント...

はじめまして。
すでに解決済みかと思いますが私のように同じように迷われた人のために。。。
下記を見て解決できました!
http://omnioo.com/omnioolab/iphone/class-outlets.php

sakitamu さんのコメント...

匿名様
情報ありがとうございます。仕事が忙しかったのととりあえず新し目の書籍で勉強し直そうと思って放置していました。(笑)
教えていただいたhttp://omnioo.com/omnioolab/iphone/class-outlets.phpの通りにはできなかったのですが、(InterfaceBuilderの中でViewを選択中に、Toolsの中から「Library」を選びます。ライブラリーウィンドウの一番上(3つのボタンのようなバーのような)の真ん中の「Classes」を押します。次にその下にたくさんのリストが表示されているので「ViewController」が表示されません)このオペレーションをしたせいかどうかはわからないのですが、当初期待していたOutletsにbuttonやらtextやらがちゃんと表示されるようになっていました。
ありがとうございました。