|
プログラムの起動/終了時に、現在の状態を保存/復元をするのはiPhoneアプリでは特に重要でした。。なぜなら。。。電話がかかってくると、アプリが止まるのです。また、バッテリィー切れでも止まるので、対策が必要です。
やり方は。。。メインプログラムのデリゲートに、以下の2つの関数を追加するだけです。
<xxxAppDelegate.m>
- (void)applicationDidFinishLaunching:(UIApplication *)application {
.....
起動時の状態復帰処理を記述
}
- (void)applicationWillTerminate:(UIApplication *)application {
.....
終了時の状態保存処理を記述
}
実際の保存/復元は、WindowsではiniファイルI/Oや、悪名高いレジストリーI/Oを行いますが、iPhone(Objective-C)の場合は、便利なNSUserDefaultsを使用するのが作法のようです。
<読み込み例>
NSUserDefaults * udefault = [NSUserDefaults standardUserDefaults];
if ([udefault stringForKey:@"UserDefaults"]==nil)
return ;
int runType = [udefault integerForKey:@"RUN_TYPE"] ;
int runUnit = [udefault integerForKey:@"RUN_UNIT"] ;
NSString *mailAddress = [udefault stringForKey:@"mailAddress"] ;
<書き込み例>
NSUserDefaults * udefault = [NSUserDefaults standardUserDefaults];
[udefault setInteger:runType forKey:@"RUN_TYPE"] ;
[udefault setInteger:.runUnit forKey:@"RUN_UNIT"] ;
if (mailAddress)
[udefault setObject:mailAddress forKey:@"mailAddress"] ;
辞書形式でデータをI/OするのがNSUserDefaultsのようで、簡単に使えますね。
RunLoggerの場合、測定中の予期せぬ終了(着信やバッテリィー切れ)や、HOMEボタンを押した時のアプリ終了として、現在の測定結果や設定条件を保存しています。そのため、再起動すると以前の状態に復帰して、自動的に測定再開出来る訳です。
私のおすすめ:
ライトウェイト・プログラマのためのiPhoneアプリ開発ガイド 実例から学ぶiPhone SDKプログラミング [本]
|