修正日: 07/10/19
練習問題12
CalcBMIみたいなのを作ってみよう! その8 後編
次に右上の変数表示欄に注目してください。以下は「loadUserDefaults」の最初の行で止めた状態です。
![](images/exercise12_6.png)
Localsの下にはaDefaultという変数が表示されています。このLocalsには現在表示している関数やメソッドのローカル変数の一覧が表示されます。このメソッドの中ではNSUserDefaultsのインスタンス(へのポインタ)のaDefaultという変数一つだけ使っているので、それが一つだけ表示されているわけです。aDefaultはポインタなので値の欄にはメモリアドレスが表示されます。
次にArgumentsの方を見ると「self」という変数があります。これはこのメソッドを実行しているオブジェクトそれ自体のポインタ、つまりBMIControllerのインスタンスです。selfの中身を見てみましょう。
![](images/exercise12_7.png)
見知った変数名が並んでいますね。BMIControllerのインスタンス変数の名前が並んでいます。BMIController.hをチェックしてみてください。「IBOutlet id」型のオブジェクトはそのオブジェクトへのポインタが、float型の変数はその値が表示されます。まだ数値を初期化していないので、height、weight、bmiの値はそれぞれ0のはずです。
では五行ほど実行してみましょう。「if([aDefault floatForKey:@"weight"])」の手前まで実行します。三回ステップオーバーボタンを押せばOKのはずです。
![](images/exercise12_7.png)
heightの値が初期化されて変わったでしょうか。値が変わるとわかりやすいように赤字で表示されます。上記のスクリーンショットではheightは初期設定からデータが読み込まれて183.059204になりました。同様にweightの方も初期化されることを確認してください。
![](images/exercise12_8.png)
各変数の内容(特にオブジェクトの概要)をコンソールに表示することができます。調べたい変数を選択して右クリックで「説明をコンソールに表示する」を選択すると、選択中の変数の説明がデバッガコンソールに表示されます。
![](images/exercise12_9.png)
![](images/exercise12_10.png)
NSArrayやNSDictionaryなどのオブジェクトの場合中身が表示されますし、少なくともオブジェクトがどのクラスのインスタンスか程度はわかります。オブジェクトの場合、あたいにポインタしか表示されないことが多いので、この機能で中身をチェックすることが重要になります。
デバッグで一番重要なのはこのような機能です。細かく説明していったらきりがないのでとりあえずこの辺で終わりにします。
最後に今回の課題です。まずこちらからサンプルをダウンロードしてください。いくつかバグが仕込んでありますので、ソースコードの比較をするのではなく、デバッガを使ってバグを修正してみてください。
解答はこちら