【Xcode5.1.1 + iOS 7.1 + MacOX10.9.4】
設定などのデータ(変数など)をアプリ内に保存するには、NSUserDefaultsを使うといいらしい。
・iPhoneアプリ開発の虎の巻 NSUserDefaults
・A Day In The Life NSUserDefaults を使ったデータの保存方法
で、load,saveの際に呼び出す関数を書いてみた。
//アイコン関連情報:読み込み -(void)loadData { defaults = [NSUserDefaults standardUserDefaults]; //アイコン画像配列 NSArray *array = [defaults arrayForKey:@"icon"]; if (array) { //既存値を使用 array_icon = [array mutableCopy]; } else { //配列を新規に作成 array_icon = [NSMutableArray arrayWithObjects:@"icon_250.jpg", @"miku_250.jpg", @"logo_2tones_250.jpg",@"shugo_250.jpg", nil]; } //アイコン選択番号 int num = (int)[defaults integerForKey:@"selectNum"]; if (num) { //既存値を使用 select_num = (long)num; } else { //初期値を設定 select_num = 0; } } //アイコン関連情報:保存 -(void)saveData { //配列:設定 NSArray *array = [array_icon copy]; [defaults setObject:array forKey:@"icon"]; //番号:設定 int num = (int)select_num; [defaults setInteger:num forKey:@"selectNum"]; //更新 BOOL successful = [defaults synchronize]; if (successful) { NSLog(@"%@", @"データの保存に成功しました。"); } }
loadDataは、viewDidLoadで、saveDataはデータに変更があったタイミングで呼び出しています。
上のコードでの注意点
1.アプリではNSMutableArray(可変配列)を使っているのだけれど、NSUserDefaultsにはNSArray(固定配列)しか保存できないので、ロード/セーブ時に配列をキャストしてやる必要がある、ということです。
・iPhoneアプリ開発メモ NSArrayはNSMutableArrayにキャスト可能か?
2.データ保存の際は、明示的に synchronize で更新しないと保存タイミングがOS任せになるらしいです。
・iPhoneアプリ開発者の憂鬱 NSUserDefaultsの保存処理でハマった
3.実際にNSUserDefaultsはどこに保存されるのか?テスト等での確認に。
・iPhoneアプリ開発者の為のAndroidアプリ開発のポイント(現忘備録) [iOS]NSUserDefaultsの保存先・実機のデータを見る方法