能將內存中的數據模型
轉換為存儲模型
,并能在將來需要時將存儲模型
還原為數據模型
的機制。
NSUserDefaults
- 直接使用原始的文件操作API,不管是C語言的還是OC的都不太方便
- Cocoa會為每個app自動創建一個數據庫,用來存儲App本身的偏好設置,如:開關
值,音量值之類的少量信息 - NSUserDefaults使用時用 [NSUserDefaults standardUserDefaults] 接口獲取單例對象
- NSUserDefaults本質上是以Key-Value形式存成plist文件,放在App的Library/Preferences目錄下
- 這個文件是不安全的,所以千萬不要用NSUserDefaults來存儲密碼之類的敏感信息,
用戶名密碼應該使用KeyChains來存儲
1 . 保存數據
- (IBAction)saveConfig:(id)sender {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setBool:self.toggle.on forKey:@"toggle"];
float progress = [self.progressTextField.text floatValue];
[userDefaults setFloat:progress forKey:@"progress"];
[userDefaults setObject:self.inputTextField.text forKey:@"input"];
// keeps the in-memory cache in sync with a user’s defaults database
[userDefaults synchronize];
}
2 . 讀取數據
- (void)loadConfig{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
self.toggle.on = [userDefaults boolForKey:@"toggle"];
self.progressView.progress = [userDefaults floatForKey:@"progress"];
self.progressTextField.text = [NSString stringWithFormat:@"%.2f",self.progressView.progress];
self.inputTextField.text = [userDefaults stringForKey:@"input"];
}
說明:
對NSUserDefaults單例對象的操作,實質上還是對PList文件 (Library/Preferences/<Application BundleIdentifier>.plist)的讀寫,只是Apple幫我們封裝好了 讀寫方法。