ホーム

トップ
準備
Become An Xcoder

練習問題0
練習問題1
練習問題2
練習問題3
練習問題4
練習問題5
練習問題6
練習問題7
練習問題8
練習問題9
練習問題10
練習問題11
練習問題12
練習問題13
練習問題14
練習問題15

C言語補習1
C言語補習2
C言語補習3

推薦図書
ブックマーク

最後に

掲示板

Cocoa Docs

自作ソフトいろいろ




修正日: 07/10/19  

練習問題11  

 解答編


 では解答編です。なんだか難しそうなことをしそうな感じがしたかもしれませんが、実際のところはものすごく簡単です。まずはDockの表示をBMIの結果にあわせて切り替えるメソッドから。

- (void)setDockIcon { NSImage *anIcon; if( bmi < kUnderweightMax ) anIcon = [NSImage imageNamed: @"blue.png"]; else if( bmi < kNormalWeightMax ) anIcon = [NSImage imageNamed: @"white.png"]; else if( bmi < kOverweightMax ) anIcon = [NSImage imageNamed: @"yellow.png"]; else anIcon = [NSImage imageNamed: @"red.png"]; [NSApp setApplicationIconImage: anIcon]; }


 計算結果のBMIの値を見て対応するイメージを取り出し、それを「setApplicationIconImage:」メソッドでセットしてあげるだけです。BMIの値の判定のところで「k○○」という単語を使っていますが、これはヘッダ「BMICalculator.h」の方で定義します。

#define kUnderweightMax 18 #define kNormalWeightMax 25 #define kOverweightMax 30


 この#define命令については「C言語補習2」を参照してください。#defineしたのにあわせて「setValues」メソッドも少し書き換えました。

if(bmi < kUnderweightMax) [alertField setStringValue: NSLocalizedString(@"too thin",@"") ]; else if(bmi>kNormalWeightMax) [alertField setStringValue: NSLocalizedString(@"too fat",@"") ]; else [alertField setStringValue: @""];


 このように#defineを使うことで、例えば将来痩せ過ぎの基準値が18から19に変わったとしても、#defineで定義してある部分一カ所を変えるだけで済み、ソースコードの中の18を探しまわって変更する必要は無くなり便利です。

 さて、あとは作った「setDockIcon」メソッドを適当なタイミングで呼び出してやればOKです。具体的には「setValues」で計算結果をウィンドウに表示した後にDockの表示を書き換えれば良いでしょう。

- (void)setValues { [bmiField setFloatValue:bmi]; [bmiSlider setFloatValue:bmi]; //略 else [alertField setStringValue:@""]; [self setDockIcon]; }


 これで完成です。そうそう、新しく作ったメソッド「setDockIcon」の定義をヘッダに追加するのも忘れないように。
 完成品サンプルをこちらに置いておきます。


 今回実装した機能は一見作るのに時間がかかりそうに思われるかもしれませんが、方法さえわかってしまえば後はすごく簡単だ、ということがわかっていただけたのではないかと思います。プログラムの基本構造というのは結局条件分岐と繰返しだけで、それ以外の大変な作業というのは、APIとしてOSから提供されている機能にどんなものがあるのか、どうやって使えば良いのかを調べることだったりします。最近はCocoaに関する日本語の情報も大分増えてきたのでそういうページをチェックしたり、英語のドキュメントを面倒くさがらずに読むことが、プログラミング上達の道だったりします。

 次回はプログラムを書く上でとても重要な(ある意味一番重要で一番大変かもしれない)デバッグについて簡単に説明します。