【iOS, Objective-C】 NSUserDefaultsを使って簡単なデータを保存する
iOSではデータを保存する方法が何種類かある。
・ファイル
・データベース(SQLite)
・Core Data
・NSUserDefaults
その中で一番簡単にデータを保存できるのがNSUserDefaultsである。
NSUserDefaultsではキーと値のセットで値が保存できる。
そのため、複雑な構造のデータの保存にはあまり向いていないが、オプションやフラグの値の保存程度ならば簡単に実装できる。
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"key"]; Bool value = [[NSUserDefaults standardUserDefaults]boolForKey:@"key"] // YES
setBoolではBoolの値が保存できるが、それ以外の値用のメソッドも用意されている。
メソッド名 | 保存できる値 |
---|---|
setObject | id |
setInteger | NSInteger |
setURL | NSURL |
setFloat | float |
setDouble | double |
setBool | Bool |
例えばスイッチが1つあってそのオン/オフの状態を保存する場合、以下のようになる。
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UISwitch *switch; @property (weak, nonatomic) NSString *switchKey; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _switchKey = @"switchKey"; _switch.on = NO; // 保存した値を読み込み if ([[NSUserDefaults standardUserDefaults]boolForKey:_switchKey]) { _switch.on = YES; } // スイッチの状態が変わったときに呼ばれる先を指定 [_switch addTarget:self action:@selector(switchDidChange) forControlEvents:UIControlEventValueChanged]; } - (void)switchDidChange { // スイッチの状態が変わったら現在のスイッチの状態をNSUserDefaultsに保存 if (_switch.on == YES) { [[NSUserDefaults standardUserDefaults]setBool:YES forKey:_switchKey]; }else { [[NSUserDefaults standardUserDefaults]setBool:NO forKey:_switchKey]; } }
実際にスイッチを切り替えてからアプリを開き直すと、スイッチの状態が保存されていることが確認できる。