iOS学习笔记-035.数据的读取——系统偏好的写入和读取

时间:2022-09-11 23:12:07

数据的读取——系统偏好的写入和读取

一、写入

很多iOS应用都支持偏好设置,比如保存用户名、密码、字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能
每个应用都有个NSUserDefaults实例,通过它来存取偏好设置
例如:保存用户名、字体大小、是否自动登录

**注意:**UserDefaults设置数据时,不是立即写入,而是根据时间戳定时地把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘,应用程序就终止了。

出现以上问题,可以通过调用synchornize方法强制写入:

[defaults synchronize];

二、读取

  //1.获取偏好设置对象
NSUserDefaults * defautls = [NSUserDefaults standardUserDefaults];

//2.读取数据
NSString * name = [defautls objectForKey:@"name"];
BOOL autoLogin = [defautls boolForKey:@"autoLogin"];

三、写入

    //2.获取偏好设置对象
NSUserDefaults * defautls = [NSUserDefaults standardUserDefaults];

//3.保存
// 通常,系统偏好中保存的数据,并不是实时保存的,具体保存时间,有系统调度
[defautls setObject:name forKey:@"name"];
[defautls setBool:autoLogin forKey:@"autoLogin"];
// 如果,对于某些需要保存在偏好设置中的数据,要求实时的响应,需要在保存系统偏好设置时,调用一个同步方法
[defautls synchronize];

iOS学习笔记-035.数据的读取——系统偏好的写入和读取

四、代码

//
// ViewController.m
// 03_UIView29_偏好
//
// Created by 杞文明 on 16/1/10.
// Copyright © 2016年 杞文明. All rights reserved.
//

#import "ViewController.h"

@interface ViewController (){
UITextView * _contentTv;
}

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
[self createLayout];
[self readPreference];
}

#pragma mark - 创建布局
-(void)createLayout{
//1.创建显示内容的标签
UITextView * text1 = [[UITextView alloc]initWithFrame:CGRectMake(70, 20, 200, 200)];
[text1 setFont:[UIFont fontWithName:@"Helvetica-Bold" size:30]];
[self.view addSubview:text1];
_contentTv = text1;

//2.创建保存的按钮
UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(120, 260, 130, 40)];
[button setTitle:@"保存偏好设置" forState:UIControlStateNormal];
[button addTarget:self action:@selector(savePreference) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}

#pragma mark - 读取偏好设置
-(void)readPreference{
//1.获取偏好设置对象
NSUserDefaults * defautls = [NSUserDefaults standardUserDefaults];

//2.读取数据
NSString * name = [defautls objectForKey:@"name"];
BOOL autoLogin = [defautls boolForKey:@"autoLogin"];

//3.数据组装显示到 contentLl上
NSString * content = [NSString stringWithFormat:@"系统偏好读取到数据:\n用户名:%@\n自动登录:%d",name,autoLogin];
[_contentTv setText:content];
}


#pragma mark - 保存偏好设置
-(void)savePreference{
//1.创建要保存的对象
NSString * name = @"小明";
BOOL autoLogin = YES;

//2.获取偏好设置对象
NSUserDefaults * defautls = [NSUserDefaults standardUserDefaults];

//3.保存
// 通常,系统偏好中保存的数据,并不是实时保存的,具体保存时间,有系统调度
[defautls setObject:name forKey:@"name"];
[defautls setBool:autoLogin forKey:@"autoLogin"];
// 如果,对于某些需要保存在偏好设置中的数据,要求实时的响应,需要在保存系统偏好设置时,调用一个同步方法
[defautls synchronize];

NSArray * caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString * cachesStr = caches[0];

NSLog(@"%@",cachesStr);

}
@end

五、图示

iOS学习笔记-035.数据的读取——系统偏好的写入和读取