Preference偏好設置

一. 偏好存儲使用場景

  • 用戶存儲偏好設置
  • 緩存信息
  • 輕量級數(shù)據存儲
  • 不可用于存儲大量數(shù)據
  • 不要濫用synchronize方法
  • 警惕數(shù)據被清空袋坑,因為NSUserDefaults是單例類褒颈,代碼的任何地方都可以將它刪除

二. 偏好存儲工作原理

三. 偏好存儲支持的數(shù)據類型

不可存儲可變類型



不可存儲可變類

四. 偏好存儲的增加、讀取瞧掺、修改纹腌、刪除

//
//  ViewController.m
//  UserDefaultDemo


#import "ViewController.h"

@interface ViewController ()
- (IBAction)addPreference:(id)sender;
- (IBAction)readPreference:(id)sender;
- (IBAction)modifyPreference:(id)sender;
- (IBAction)deletePreference:(id)sender;
- (IBAction)clearAllPreference:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (IBAction)addPreference:(id)sender {
    //增加偏好設置
    //獲取NSUserDefault類實例
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    //存儲數(shù)字類型
    [userDefaults setBool:NO forKey:@"BoolKey"];
    [userDefaults setInteger:123 forKey:@"IntegerKey"];
    [userDefaults setFloat:0.123 forKey:@"FloatKey"];
    [userDefaults setDouble:0.123456 forKey:@"DoubleKey"];
    //存儲字符串類型
    [userDefaults setObject:@"Hello" forKey:@"StringKey"];
    //存儲NSData類型
    NSData *data = [@"hello Data" dataUsingEncoding:NSUTF8StringEncoding];
    [userDefaults setObject:data forKey:@"DataKey"];
    //存儲數(shù)組類型
    NSArray *array = @[@"one",@"two",@"three"];
    [userDefaults setObject:array forKey:@"ArrayKey"];
    //存儲字典類型
    NSDictionary *dict = @{@"key1":@"value1",@"key2":@"value2",@"key3":@"value3"};
    [userDefaults setObject:dict forKey:@"DictionaryKey"];
    
    [userDefaults synchronize];//將存儲的偏好存儲內容同步到ROM中
}

- (IBAction)readPreference:(id)sender {
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    //讀取數(shù)字值
    BOOL readBool = [userDefaults boolForKey:@"BoolKey"];
    NSLog(@"Bool value is:%@",readBool?@"YES":@"NO");
    
    NSInteger readInteger = [userDefaults integerForKey:@"IntegerKey"];
    NSLog(@"Integer value is:%ld",readInteger);
    
    float readFloat = [userDefaults floatForKey:@"FloatKey"];
    NSLog(@"Float value is:%f",readFloat);
    
    double readDouble = [userDefaults doubleForKey:@"DoubleKey"];
    NSLog(@"Double value is:%lf",readDouble);
    
    //讀取字符串值
    NSString* readString = [userDefaults objectForKey:@"StringKey"];
    NSLog(@"String value is:%@",readString);
    
    //讀取NSData值
    NSData* readData = [userDefaults objectForKey:@"NSDataKey"];
    NSString* dataToString = [[NSString alloc]initWithData:readData encoding:NSUTF8StringEncoding];
    NSLog(@"NSData value is:%@",dataToString);
    //讀取數(shù)組值
    NSArray* readArray = [userDefaults objectForKey:@"ArrayKey"];
    NSLog(@"Array value is:%@",readArray);
    //讀取字典值
    NSDictionary* readDictionary = [userDefaults objectForKey:@"DictionaryKey"];
    NSLog(@"Dictionary value is:%@",readDictionary);
}

- (IBAction)modifyPreference:(id)sender {
    //修改偏好設置 修改和增加其實是一樣的
    //獲取NSUserDefault類實例
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    //更新數(shù)字類型
    [userDefaults setBool:YES forKey:@"BoolKey"];
    [userDefaults setInteger:456 forKey:@"IntegerKey"];
    [userDefaults setFloat:3.14 forKey:@"FloatKey"];
    [userDefaults setDouble:9.87654 forKey:@"DoubleKey"];
    //更新字符串類型
    [userDefaults setObject:@"World" forKey:@"StringKey"];
    //更新NSData類型
    NSData *data = [@"new Data" dataUsingEncoding:NSUTF8StringEncoding];
    [userDefaults setObject:data forKey:@"DataKey"];
    //更新數(shù)組類型
    NSArray *array = @[@"four",@"five",@"six"];
    [userDefaults setObject:array forKey:@"ArrayKey"];
    //更新字典類型
    NSDictionary *dict = @{@"key5":@"value5",@"key6":@"value6",@"key7":@"value7"};
    [userDefaults setObject:dict forKey:@"DictionaryKey"];
    
    [userDefaults synchronize];//將存儲的偏好存儲內容同步到ROM中
}

- (IBAction)deletePreference:(id)sender {
    //獲取NSUserDefaults實例
    NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
    
    //存儲數(shù)字值
    [userDefaults removeObjectForKey:@"BoolKey"];
    [userDefaults removeObjectForKey:@"IntegerKey"];
    [userDefaults removeObjectForKey:@"FloatKey"];
    [userDefaults removeObjectForKey:@"DoubleKey"];
    //存儲字符串值
    [userDefaults removeObjectForKey:@"StringKey"];
    //存儲NSData值
    [userDefaults removeObjectForKey:@"NSDataKey"];
    //存儲數(shù)組值
    [userDefaults removeObjectForKey:@"ArrayKey"];
    //存儲字典值
    [userDefaults removeObjectForKey:@"DictionaryKey"];
    
    //同步數(shù)據
    [userDefaults synchronize];
}

- (IBAction)clearAllPreference:(id)sender {
    //刪除所有偏好存儲
    //獲得應用的域的字符串
    NSString *appDomainString = [[NSBundle mainBundle]bundleIdentifier];
    //清空偏好存儲
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomainString];
}
@end

五. 案例——緩存設置頁面

//
//  ViewController.m
//  SettingDemo

#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *myTextField;
@property (weak, nonatomic) IBOutlet UISwitch *mySwitch;
- (IBAction)switchAction:(UISwitch *)sender;
@property (weak, nonatomic) IBOutlet UISlider *mySlider;
- (IBAction)sliderAction:(UISlider *)sender;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _myTextField.delegate = self;
    [self loadPreference];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
//加載偏好存儲的值
- (void)loadPreference {
    NSString *string = [[NSUserDefaults standardUserDefaults]objectForKey:@"textKey"];
    _myTextField.text = string;
    
    BOOL switchValue = [[NSUserDefaults standardUserDefaults]boolForKey:@"switchKey"];
    _mySwitch.on = switchValue;
    
    float sliderValue = [[NSUserDefaults standardUserDefaults]floatForKey:@"sliderKey"];
    _mySlider.value = sliderValue;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    NSLog(@"字符串變?yōu)椋?@",textField.text);
    //存儲/更新字符串的值
    [[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:@"textKey"];
    //更新偏好存儲到ROM中
    [[NSUserDefaults standardUserDefaults]synchronize];
}

- (IBAction)switchAction:(UISwitch *)sender {
    NSLog(@"開關變?yōu)椋?d",sender.isOn);
    //存儲/更新開關的值
    [[NSUserDefaults standardUserDefaults] setBool:sender.isOn forKey:@"switchKey"];
    [[NSUserDefaults standardUserDefaults]synchronize];
    
}
- (IBAction)sliderAction:(UISlider *)sender {
    NSLog(@"滑塊位置:%f",sender.value);
    //存儲/更新滑塊的值
    [[NSUserDefaults standardUserDefaults] setFloat:sender.value forKey:@"sliderKey"];
    [[NSUserDefaults standardUserDefaults]synchronize];
}

//隱藏鍵盤
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}
@end
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末苟弛,一起剝皮案震驚了整個濱河市软棺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌影涉,老刑警劉巖变隔,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蟹倾,居然都是意外死亡匣缘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門鲜棠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肌厨,“玉大人,你說我怎么就攤上這事岔留∠目蓿” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵献联,是天一觀的道長竖配。 經常有香客問我,道長里逆,這世上最難降的妖魔是什么进胯? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮原押,結果婚禮上胁镐,老公的妹妹穿的比我還像新娘。我一直安慰自己诸衔,他們只是感情好盯漂,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笨农,像睡著了一般就缆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谒亦,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天竭宰,我揣著相機與錄音,去河邊找鬼份招。 笑死切揭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的锁摔。 我是一名探鬼主播廓旬,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谐腰!你這毒婦竟也來了孕豹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怔蚌,失蹤者是張志新(化名)和其女友劉穎巩步,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桦踊,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡椅野,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了籍胯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竟闪。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖杖狼,靈堂內的尸體忽然破棺而出炼蛤,到底是詐尸還是另有隱情,我是刑警寧澤蝶涩,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布理朋,位于F島的核電站絮识,受9級特大地震影響,放射性物質發(fā)生泄漏嗽上。R本人自食惡果不足惜次舌,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兽愤。 院中可真熱鬧彼念,春花似錦、人聲如沸浅萧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洼畅。三九已至吩案,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間土思,已是汗流浹背务热。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留己儒,地道東北人崎岂。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像闪湾,于是被迫代替她去往敵國和親冲甘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容