NSUserDefaults に設定を保存

2012/05/28

よく使うのでメモ

まず型を指定しない場合はObjective-Cのオブジェクト同様、以下のメソッドで利用する。

- (id)objectForKey:(NSString *)defaultName;
- (void)setObject:(id)value forKey:(NSString *)defaultName;

NSUserDefaults から値を読み込む場合(型未設定)

- (id)loadSetting:(NSString *)key {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    return [defaults objectForKey:key];
}

NSUserDefaults に値を保存する場合(型未設定)

- (void)saveSetting:(NSString *)key :(id)value {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setValue:value forKey:key];
    [defaults synchronize];
}

明示的に型を指定する場合は、castするか以下のメソッドを利用する。

- (NSString *)stringForKey:(NSString *)defaultName;
- (NSArray *)arrayForKey:(NSString *)defaultName;
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
- (NSData *)dataForKey:(NSString *)defaultName;
- (NSArray *)stringArrayForKey:(NSString *)defaultName;
- (NSInteger)integerForKey:(NSString *)defaultName;
- (float)floatForKey:(NSString *)defaultName;
- (double)doubleForKey:(NSString *)defaultName;
- (BOOL)boolForKey:(NSString *)defaultName;
- (NSURL *)URLForKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);

- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
- (void)setURL:(NSURL *)url forKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);

ちなみに、カスタムクラスをそのまま保存しようとする場合はエラーになってしまうので、NSDictionary に変換する必要がある(うまくcastとかできるかも知れないが・・・)。

NSUserDefaults から BOOL型を読み込む場合

- (BOOL)loadSettingBool:(NSString *)key {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    return [defaults boolForKey:key];
}

NSUserDefaults に BOOL型を保存する場合

- (void)saveSettingBool:(NSString *)key :(BOOL)value {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:value forKey:key];
    [defaults synchronize];
}

ちなみに不要になった設定は、removeObjectForKey で削除する。

- (void)removeObjectForKey:(NSString *)defaultName