数据持久化之NSUserDefaults

能将内存中的数据模型转换为存储模型,并能在将来需要时将存储模型还原为数据模型的机制。

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帮我们封装好了 读写方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容