修正日: 07/09/05
練習問題9
CalcBMIみたいなのを作ってみよう! その5
今回はデータを初期設定ファイルに保存する方法について紹介します。初期設定にデータを出し入れするには「NSUserDefaults」というクラスを使います。このクラスのリファレンスはこちら。まずは「Overview」の所を読んでみてください。
本来ならばこれを読み、あとはGoogleで検索するなどして使い方を自分で調べなくてはいけないのですが、まだそれは難しいと思いますので、簡単に使い方を説明します。NSUserDefaultの使い方は簡単に分けて三段階あります。
- NSUserDefaultインスタンスの取り出し
- NSUserDefaultインスタンスから必要なデータを取り出し、もしくは必要なデータを格納
- NSUserDefaultインスタンスを保存
具体的にはこんな感じ。
//データの取り出し
-(void)loadPreference
{
NSUserDefaults *aDefault=[NSUserDefaults standardUserDefaults];
height=[aDefault floatForKey:@"height"];
weight=[aDefault floatForKey:@"weight"];
}
//データの保存
-(void)loadPreference
{
NSUserDefaults *aDefault=[NSUserDefaults standardUserDefaults];
[aDefault setFloat:height forKey:@"height"];
[aDefault setFloat:weight forKey:@"weight"];
[aDefault synchronize];
}
まず最初の
[NSUserDefaults standardUserDefaults]
で、デフォルトのNSUserDefaultsオブジェクトを取り出します。つまりユーザディレクトリの「/Library/Preferences」以下にある適当な初期設定ファイルの中身が読み込まれます。「デフォルトの」ということで必要に応じていろいろな初期設定ファイルのデータを読み書きできるのですが、とりあえずは「standardUserDefaults」だけ覚えておけばOKです。そしてその次の二行でデータの取り出し、セットをしています。
NSUserDefaultsにデータをセットするときは「キー」を付けてデータをセットします。キーというのはデータのラベルのようなもので、この例の場合「身長」のデータに「height」というキーを付けてセットしています。
//データのセット
[aDefault setFloat:height forKey:@"height"];
すると次回身長のデータを取り出したいときは「height」のキーがくっついたデータとして取り出すことができるわけです。
//データの取り出し
height=[aDefault floatForKey:@"height"];
この例ではfloatのデータを読み書きしていますが、その他にint用、bool用、object用のメソッドが用意されています。
そしてセットしたデータを初期設定ファイルに書込んで保存するときは「synchronize」メソッドを呼んでやります。
//データをファイルに書込み
[aDefault synchronize];
このメソッドを実行することでセットしたデータが初めてファイルに書込まれます。いくらsetFloat:forKey:などでデータをセットしても、これを忘れると保存されないので注意しましょう。またデータを読込むだけならばsynchronizeを呼ぶ必要はありません。
ということでここで問題です。身長と体重を初期設定に保存して、次回起動時に反映されるようにCalcbmiを改造してみてください。
解答はこちら