[自在]NSUserDefaultsによるiPhoneアプリの一時的なデータ保存方法

第2弾アプリをリリースして、自分で実際に使ってみたら致命的欠点が。。。

ライフログ系のアプリを目指していたのだが、iPhoneアプリの変数はメモリが自動で解放されるようだ。

日常生活の中で、気づいたときにクリックするアプリだったのだが、いつの間にかカウントが0に戻っている。「さくさくHD」みたいなメモリ解放アプリを使うと、当然0カウントになってしまう。

これでは使い物にならないので、値を保存する方法を考えないといけない。かといって、ファイル単位で扱うほどのおおげさなものでもないし。調べてみると、「NSUserDefault」クラスを使うのが最も簡単な方法のようだ。

NSUserDefaultsは、アプリ固有の設定値を保存するための利用するようだが、単純な状態値を保存するのには便利。(例えばカウンターアプリのカウンター値など)


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

でNSUserDefaultsのインスタンスを生成。NSUserDefaultsは連想配列になっているのでキー値を設定して、値の書き込み読み取りが出来る。

[defaults setInterger:count forKey:@"count"]; //整数値の書き込み
count =[defaults integerForKey:@"count"]; //整数値の読み取り

おお、これは簡単で便利。
実際のアプリに組み込んでみたら、初期値が設定されていなかったので不具合を起こしてしまった。初期値の設定方法を調べたら、

NSDictionary *dict = @{ @"count":@1};
[defaults registerDefaults:dict];

と、NSDicitonary形式で設定した連想配列を、RegisterDefaultsメソッドで渡せば良いようだ。このコードをViewのDidLoadメソッドのところに記載したので、シーン遷移ごとに呼び出されるのだが、初期値が設定されるのは最初の一回だけのようで問題なし。(AppDelegate以前に書いておけば1回で済むような気もする。)

いろんな本にNSUserDefaultsの簡単な解説はあるのだが、藤田泰介「iPhone/iPadアプリケーション開発の教科書」が、もっとも網羅的に解説してあったのでお薦め。

プロの力を身につける iPhone/iPadアプリケーション開発の教科書
藤田 泰介
ソフトバンククリエイティブ
売り上げランキング: 50,799