使用NSUserDefaults保存BOOL值时,有时候会用到默认值为YES的情况。常见的做法是在程序启动完成时,使用registerDefaults来把一个设置好默认值的字典传进去。
有些场景下,希望不调用registerDefaults方法就可以将默认值设置为YES,这时可以用setObject:forKey:方法和objectForKey:来实现,通过读取出来的相应的object是否为nil来判断是否是第一次读取该值。
代码如下:
#import <Foundation/Foundation.h>
/**
基于NSUserDefaults,默认值为YES,不需要registerDefaults。读和写都必须要用该类提供的接口。
*/
@interface LHWDefaultYESUserDefaults : NSObject
+ (BOOL)boolForKey:(NSString *)key;
+ (void)setBool:(BOOL)boolValue forKey:(NSString *)key;
@end
@implementation LHWDefaultYESUserDefaults
+ (BOOL)boolForKey:(NSString *)key {
BOOL result;
NSNumber *boolNumber = [[NSUserDefaults standardUserDefaults] objectForKey:key];
if (boolNumber) {
result = boolNumber.boolValue;
} else {
result = YES;
}
return result;
}
+ (void)setBool:(BOOL)boolValue forKey:(NSString *)key {
[[NSUserDefaults standardUserDefaults] setObject:@(boolValue) forKey:key];
}
@end
需要注意的是,读与写一定都要用该类提供的方法,不然会导致取出或设置的类型不一致,后果很严重。
网友评论