UI16_数据持久化(NSUserDefaults,简单对象,复杂对象归档反归档,文件管理者"删除添加文件")
来源:互联网 发布:大数据工程师压力大吗 编辑:程序博客网 时间:2024/05/18 19:45
苹果手机为了保证自己的数据上得绝对安全设计了沙盒,每一个应用程序都配备了自己的沙盒文件,每一次运行,文件夹的名字就会变成一个没有任何规律的字符串.1
沙盒里有多少文件夹?
沙盒里一共有三个文件夹1.ducuments文件:主要是用来存储用户的想要存储的一些信息,比如收藏的信息或者自己设置的一些内容,所以我们做收藏功能就是往这个文件夹里写文件2.library文件:这个文件夹是方便程序开发者使用的,主要是操作它里的两个文件,caches和preferences; caches:用来保存缓存文件,SDWebImage会把图片加到缓存文件中,所以清除缓存功能就是把这个文件夹删除(存在caches文件就是缓存的文件) preferences一般来保存程序设置的信息,比如NSUserDefautls就会把数据保存在这个文件夹里3.tmp文件:一般存放临时内容4.之前iOS8之前沙盒里还有一个.app文件,在新的版本里已经被移走了
数据持久化步骤
1.指定前往哪一个文件夹 2.用字符串接受路径 3.拼接文件路径 4.写入本地或者归档操作 注:如果是复杂对象归档,要签订nscoding方法,并且实现两个协议的方法,放在数组里的复杂对象归档也要签协议
找沙盒路径
NSArray *sandBoxPath = NSSearchPathForDirectoriesInzDomains(NSCachesDirectory, NSUserDomainMask, YES);第一个参数:指定当前前往哪个文件夹,前往document文件用NSDocumentDirectory(64行那个),还可以前往caches文件夹(68行那个)第二个参数:访问的文件夹类型,指定访问是用户文件夹第三个参数:绝对路径(YES),相对路径(NO) 绝对路径是个系统来使用的,系统可以根据当前的路径找到文件夹,我们操作文件的时候都是绝对路径 相对路径只会把要前往的文件夹显示,其他部分都是~,告诉程序员要去哪个文件夹
简单对象写入本地(简单对象:NSString,NSArray等)
1.先通过数组获取沙盒路径 NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);2.从数组中获取沙盒路径 NSString *sandBoxPath = sandBox[0];3.要给写入的文件拼接一个路径,拼接方式有两种 第一种:NSString *documentPath = [sandBoxPath stringByAppendingString:@"/珊珊.txt"]; 第二种: NSString *documentPath = [sandBoxPath stringByAppendingPathComponent:@"珊珊.txt"]; 我们经常用的是第二种,它是和我们的数据管理的配套的 两者的区别在于第一个要加"/",而第二个不用4.将字符串写入本地 定义一个字符串:NSString *str = @"哗啦哗啦很丰富,经发局;开发开发"; 写入本地代码: [str writeToFile:documentPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; 第一个参数:文件夹要保存的路径 第二个参数:对文件里的代码进行保护YES 第三个参数:编码 第四个参数:错误信息5.读出沙盒内容 NSString *tempStr = [NSString stringWithContentsOfFile:documentPath encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@",tempStr);
特别注意:如果路径下有对应的文件,则会把原来的文件覆盖,如果没有则创建一个新文件
将数组写入本地
1.创建一个数组 NSArray *arr = @[@"1",@"2",@"3"];2.通过数组获取沙盒的地址 NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);3.找到沙盒地址 NSString *sandBoxStr=sandBox[0];4.拼接写入地址 NSString *documentPath = [sandBoxStr stringByAppendingPathComponent:@"故意.txt"];5.将数组写入到本地 [arr writeToFile:documentPath atomically:YES];6.将数组读出来 NSArray *readArr = [NSArray arrayWithContentsOfFile:documentPath]; NSLog(@"%@",readArr);
字典写入本地
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"liu",@"2",@"流星雨" ,nil]; NSArray *dicPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = [dicPath stringByAppendingPathComponent:@"haaf.plist"]; [dic writeToFile:path atomically:YES]; NSLog(@"%@",path); NSDictionary *temp = [NSDictionary dictionaryWithContentsOfFile:path]; NSLog(@"%@",temp);
复杂对象写入本地(主要是我们自己创建的对象写入到本地,也叫归档和反归档)
准备工作:我们建立一个Student类继承NSObject,在这个类里定义四个属性,设置了初始化和便利构造器.但是下面我们要说一下在这个类里我们要在.h签订NSCoding,在.m中实现两个协议方法.方法如下: 注意:签订完NSCoding协议之后需要实现两个协议方法,一个是归档的时候使用的,另一个是反归档的时候使用- (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:_name forKey:@"name"]; [aCoder encodeObject:_sex forKey:@"sex"]; [aCoder encodeObject:_hobby forKey:@"hobby"]; [aCoder encodeInteger:_age forKey:@"age"]; //使用encode方法要和数据类型相互匹配}- (id)initWithCoder:(NSCoder *)aDecoder{ self = [super init]; if (self) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.sex = [aDecoder decodeObjectForKey:@"sex"]; self.hobby = [aDecoder decodeObjectForKey:@"hobby"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; } return self;}
对象归档和反归档
1.便利构造器形式创建对象 Student *stu = [Student studentWithName:@"珊珊" sex:@"男" hobby:@"开发费" age:0];2.通过数组获取沙盒路径 NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);3.用字符串接受沙盒路径 NSString *sandPath=sandBox[0];4.拼接文件路径 NSString *documentPath = [sandPath stringByAppendingPathComponent:@"刘山.avc"];5.归档 [NSKeyedArchiver archiveRootObject:stu toFile:documentPath];6.反归档 Student *newStu = [NSKeyedUnarchiver unarchiveObjectWithFile:documentPath];
数组归档和反归档
NSArray *arr = [NSArray arrayWithObjects:stu1,stu2,stu3, nil]; NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *sandPath = sandBox[0]; NSString *documentPath = [sandPath stringByAppendingPathComponent:@"学生数组.avi"]; [NSKeyedArchiver archiveRootObject:arr toFile:documentPath]; NSLog(@"%@",documentPath); //反归档 NSArray *arr2 = [NSKeyedUnarchiver unarchiveObjectWithFile:documentPath]; for (Student *stue in arr2) { NSLog(@"%@",stue.name); }
NSUserDefaults
说明:这是个字典,创建方式叫单例.保存在偏好设置文件夹里的plist文件中.用途:保存简单的字符串.用法和字典相似.存放一些小的数据 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; defaults setObject:@"123456" forKey:@"passWord"]; NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSLog(@"%@",sandBox[0]);取值操作(只能这样取值) NSLog(@"%@",[defaults objectForKey:@"passWord"]);
文件管理者(添加删除文件)
//通过文件管理者对文件夹进行操作 NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES); NSString *sandBoxpath = sandBox[0]; //创建一个文件管理者 NSFileManager *manager = [NSFileManager defaultManager]; //给要创建的文件夹拼接一个路径 NSString *filePath = [sandBoxpath stringByAppendingPathComponent:@"guyu"]; //文件夹的名不需要有任何的扩展名 //通过manager进行文件夹的创建 //第一个参数:文件路径 [manager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil]; NSLog(@"%@",filePath); //向新创建的文件夹里写入一个字符串 NSString *documentPath = [filePath stringByAppendingPathComponent:@"字符串.txt"]; NSString *str = @"我是一个字符串"; [str writeToFile:documentPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; //删除"顾宇"文件夹 [manager removeItemAtPath:filePath error:nil]; NSLog(@"%@",sandBoxpath); NSArray *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, 1, YES); NSString *strCaches = cachesPath[0]; [manager removeItemAtPath:strCaches error:nil];
0 0
- UI16_数据持久化(NSUserDefaults,简单对象,复杂对象归档反归档,文件管理者"删除添加文件")
- iOS经典讲解之复杂对象的数据持久化-归档与反归档
- 沙盒机制 简单数据和复杂数据的数据持久化 (归档反归档)
- iOS 复杂对象持久化 归档和反归档的过程
- 数据持久化-对象归档
- CYC- 复杂对象归档 反归档
- NSUserDefaults 归档,数据持久化
- 数据持久化,归档,反归档
- iOS开发-数据持久化 :沙盒,归档反归档,NSFileManager文件管理器(单例)
- ios24-数据持久化-对象归档
- IOS数据持久化之对象归档
- 数据持久化-属性列表、归档、NSUserDefaults
- IOS文件操作和自定义对象的归档(序列化)、反归档(反序列化)
- iOS疯狂详解之复杂对象归档反归档
- 48.复杂对象写入归档与反归档
- iOS数据持久化 归档 plist文件
- 文件读写,归档,反归档
- iOS 数据持久化(归档与反归档)
- Activity
- 2015/8/19/横、竖、满屏/消除标题、标题栏/startActivityForResult(启动带有返回值的intent)/Intent
- Python学习笔记二:Python中的列表
- UVA 489-Hangman Judge
- 欢迎访问我在博客园的博客
- UI16_数据持久化(NSUserDefaults,简单对象,复杂对象归档反归档,文件管理者"删除添加文件")
- 题目:矩阵的之字型遍历
- 多线程并发问题(二)
- HDU 1203 I NEED A OFFER!
- 八大排序算法总结
- Spring Hibernate 开启事务
- 题目:空格替换
- 黑马程序员---学习笔记3:进制
- curl--curl是利用URL语法在命令行方式下工作的开源文件传输工具,