偏好設置的詳解:
用途:主要用來存儲用戶系統的設備信息,但有的時候也可以在程序的任何地方用來存儲數據,作為全局數據來訪問,例如視圖切換需要進行登錄時。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"itcast.cn" forKey:@"userName"];
[defaults setFloat:18.0f forKey:@"fontSize"];
[defaults setBool:YES forKey:@"autoLogin"];
// 讀取系統偏好
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *userName = [defaults objectForKey:@"userName"];
float fontSize = [defaults floatForKey:@"fontSize"];
BOOL autoLogin = [defaults boolForKey:@"autoLogin"];
注意:UserDefaults設置數據時,不是立即寫入,而是根據時間戳定時地把緩存中的數據寫入本地磁盤。所以調用了set方法之后數據有可能還沒有寫入磁盤,應用程序就終止了。
出現以上問題,可以通過調用synchornize同步方法強制寫入:
[defaults synchronize];
偏好設置的使用:
1.設置用戶登錄信息(偏好設置)
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"admin" forKey:@"userName"]; //登錄用戶名
[userDefaults setObject:[NSDate date] forKey:@"loginDate"]; //登錄時間
[userDefaults setInteger:2 forKey:@"times"]; //登錄次數
2.將設置的用戶信息強制保存到磁盤沙盒目錄下的preference文件中
[userDefaults synchronize];
3.讀取偏好設置
NSUserDefaults *userDefaluts = [NSUserDefaults standardUserDefaults];
NSString *userName = [userDefaluts objectForKey:@"userName"];
NSDate *date = [userDefaluts objectForKey:@"loginDate"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSInteger times = [userDefaluts integerForKey:@"times"];
NSLog(@"userName:%@,date:%@,times:%ld",userName,[dateFormatter stringFromDate:date],times);
演示結果:
2015-09-20 10:18:33.529 02-用戶偏好設置[601:20685] userName:admin,date:2015-09-20 10:18:33,times:2