首页 / IOS / iOS开发-数据存储
iOS开发-数据存储
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iOS开发-数据存储,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3470字,纯文字阅读大概需要5分钟。
内容图文
//
这个方法获取出的结果是一个数组.因为有可以搜索到多个路径.
NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
//在这里,我们指定搜索的是Cache目录,所以结果只有一个,取出Cache目录
NSString *cachePath = array[0];
//拼接文件路径,stringByAppendingPathComponent会在cachePath路径后面加上/再拼接
NSString *filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];
//1.用字典写, plist文件当中保存的是字典.
NSDictionary *dict = @{@"age" : @18,@"name" : @"gaowei"};
//ToFile:要写入的沙盒路径 [dict writeToFile:filePathName atomically:YES];
//2.用数组写,plist文件当中保存的类型是数组
NSArray *dataArray = @[@56,@"asdfa"];
//ToFile:要写入的沙盒路径
[dataArray writeToFile:filePathName atomically:YES];
读取:
//
这个方法获取出的结果是一个数组.因为有可以搜索到多个路径.
NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
//在这里,我们指定搜索的是Cache目录,所以结果只有一个,取出Cache目录
NSString *cachePath = array[0];
//拼接文件路径
NSString *filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];
//从文件当中读取字典, 保存的plist文件就是一个字典,这里直接填写plist文件所存的路径
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePathName];
//如果保存的是一个数组.那就通过数组从文件当中加载.
NSArray *dataArray = [NSArray arrayWithContentsOfFile:filePathName];
//
偏好设置NSUserDefaults
//
底层就是封闭了一个字典,利用字典的方式生成plist文件
//
好处:不需要关心文件名(它会自动生成)快速进行键值对存储.
NSUserDefaults *defautls = [NSUserDefaults standardUserDefaults];
[defautls setObject:@"gaowei" forKey:@"name"];
[defautls setBool:YES forKey:@"isBool"];
[defautls setInteger:5 forKey:@"num"];
//同步,立即写入文件.
[defautls synchronize];
读取:
//
存是用什么key存的, 读的时候就要用什么key值取
//
存的时候使用的什么类型,取的时候也要用什么类型.
NSString *str = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
BOOL isBool = [[NSUserDefaults standardUserDefaults] boolForKey:@"isBool"];
NSInteger num = [[NSUserDefaults standardUserDefaults] integerForKey:@"num"];
NSLog(@"name =%@-isBool=%d-num=%ld",str,isBool,num);
归档的存储:NSKeyedArchiver
//
获取沙盒的路径 person.data 随便写
NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
NSString *filePathName = [path stringByAppendingPathComponent:@"person.data"];
// Person *per = [[Person alloc] init];
// per.name = @"xmg";
// per.age = 10;
Student *stu = [[Student alloc] init];
stu.name = @"gxq";
stu.age = 10;
stu.height = 150;
Dog *dog = [[Dog alloc] init];
dog.name = @"wangcai";
stu.dog = dog;
//归档
//archiveRootObject执行这个方法时, 底层会调用要存的对象的encodeWithCoder方法,
//调用encodeWithCoder目的就是想询问下要存对象的哪些属性.怎么存.
[NSKeyedArchiver archiveRootObject:stu toFile:filePathName];
读取:
//
获取沙盒的路径
NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
NSString *filePathName = [path stringByAppendingPathComponent:@"person.data"];
//解档
//unarchiveObjectWithFile执行这个方法时,底层会调用要存的对象的initWithCoder方法,
//调用initWithCoder目的就是想询问下要取对象的哪些属性.
Student *per = [NSKeyedUnarchiver unarchiveObjectWithFile:filePathName];
//
注意点: 不管是自定义的类对象"per”,继承的类对象”stu”,包含的类对象”dog”,只要归档的时候,都要实现encodeWithCoder,解档就要实现initWithCoder
//
必须得要遵守NSCoding协议才行
-(void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:self.name forKey:@"name"];
[encoder encodeInt:self.age forKey:@"age"];
}
//当解析一个文件时就会调用.
-(instancetype)initWithCoder:(NSCoder *)decoder{
if (self = [super init]) {
self.name = [decoder decodeObjectForKey:@"name"];
self.age = [decoder decodeIntForKey:@"age"];
}
return self;
}
原文:http://www.cnblogs.com/liugengqun/p/5168917.html
内容总结
以上是互联网集市为您收集整理的iOS开发-数据存储全部内容,希望文章能够帮你解决iOS开发-数据存储所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。