【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の保存先・実機のデータを見る方法