UISenior之数据的本地化持久化
数据的本地化主要分为两个方面:1.简单数据的本地持久化(NSString、NSArray、NSDictionary、NSData)2.复杂数据的本地持久化(本文以Person类为例)
简单对象的本地化:
简单对象的本地化基本可以分为四步:
第一步:找到Documents的文件夹的路径。
第二步:我们要知道存储什么,所以要创建存储的对象
第三步:需要知道字符串最终的存储的地方,所以需要创建一个路径去存储字符串
第四步:准备工作完成,将字符串写入文件
下面具体实现上述四步:
第一步
- // 第一步:需要知道这个对象存在哪里,所以需要一个文件夹的路径
- // 找到Documents文件夹路径
- NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
第二步
- // 第二步:我们知道要存储什么?所以需要创建什么
- // 创建要存储的内容:字符串
- NSString *str = @"AJAR";
第三步
- // 第三步:需要知道字符串最终存储的地方,所以需要创建一个路径去存储字符串
- NSString *strPath = [documents stringByAppendingPathComponent:@"zhy.txt"];
第四步
- <span style="color:#000000;">// 第四步:准备工作完成,将字符串写入文件
- // 第一个参数:写入的文件的一个路径
- // 第二个参数:在断电的情况下,会不会自动保存
- // 第三个参数:编码格式
- // 第四个参数:错误信息
- [str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
- NSLog(@"strPath = %@", strPath);</span>
将NSString文件夹存储的内容取出
- // 将字符串取出:使用stringWithContentsOfFile这个方法将其取出
- // 第一个参数:字符串存储的路径
- // 第二个参数:编码格式
- // 第三个参数:错误信息
- NSString *newStr = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
- NSLog(@"newStr = %@", newStr);
复杂对象的本地化:
复杂对象的本地化最重要的两步就是归档和解档
本文以Person对象为例,首先创建Person类继承于NSObject
Person.h文件
- ///姓名
- @property(nonatomic, copy)NSString *name;
- ///性别
- @property(nonatomic, copy)NSString *gender;
- ///年龄
- @property(nonatomic, assign)NSInteger age;
Person.m文件中 需要重写归档和解档的方法
- //归档
- //将所有的属性进行归档
- -(void)encodeWithCoder:(NSCoder *)aCoder {
- [aCoder encodeObject:self.name forKey:@"name"];
- [aCoder encodeObject:self.gender forKey:@"gender"];
- [aCoder encodeInteger:self.age forKey:@"age"];
- }
- //解档(反归档)
- - (instancetype)initWithCoder:(NSCoder *)aDecoder {
- self = [super init];
- if (self) {
- self.name = [aDecoder decodeObjectForKey:@"name"];
- self.gender = [aDecoder decodeObjectForKey:@"gender"];
- self.age = [aDecoder decodeIntegerForKey:@"age"];
- }
- return self;
- }
在ViewController里对Person对象进行操作
找到Documents文件夹的目录
- NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
创建Person对象
- <span style="font-size:14px;"> Person *per = [[Person alloc] init];
- per.name = @"MBboy";
- per.gender = @"boy";
- per.age = 18;</span>
把这个复杂对象归档
- // 创建NSMutableData,用于创建初始化归档工具的
- NSMutableData *data = [NSMutableData data];
- NSLog(@"======data = %@====", data);
- // 创建归档工具
- NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
- // 对要归档的person对象进行归档
- [archiver encodeObject:per forKey:@"person"];
- // 结束归档
- [archiver finishEncoding];
- NSLog(@"======data = %@====", data);
将归档的内容NSMutableData存储在本地
- NSString *personPath = [documentPath stringByAppendingPathComponent:@"person.plist"];
写入
- [data writeToFile:personPath atomically:YES];
- NSLog(@"personPath = %@", personPath);
解档
将要解档的数据找出来
- NSData *resultData = [NSData dataWithContentsOfFile:personPath];
- NSLog(@"resultData = %@", resultData);
创建解档工具
- NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:resultData];
对person对象进行解档[使用对象接收]
- Person *newPer = [unarchiver decodeObjectForKey:@"person"];
结束解档
- [unarchiver finishDecoding];
- NSLog(@"name = %@ gender = %@ age = %ld", newPer.name, newPer.gender, newPer.age);
UISenior之数据的本地化持久化的更多相关文章
- Perl数据序列化和持久化(入门):Storable模块
Perl提供了一个Storable模块,用来对数据结构进行序列化(serialization,Perl中称为冻结),也就是将数据结构保存为二进制数据. 序列化后的数据可以写入文件实现持久化,可以将持久 ...
- 在nodejs使用Redis缓存和查询数据及Session持久化(Express)
在nodejs使用Redis缓存和查询数据及Session持久化(Express) https://segmentfault.com/a/1190000002488971
- 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。
在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...
- Android基础总结(5)——数据存储,持久化技术
瞬时数据:指那些存储在内存当中,有可能会因为程序广播或其他原因导致内存被回收而丢失的数据. 数据持久化:指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不丢失. ...
- [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)
本文转自:https://blog.csdn.net/wellway/article/details/76176760 在之前的这篇文章 在ExpressJS(NodeJS)中设置二级域名跨域共享Co ...
- Android学习之基础知识九 — 数据存储(持久化技术)之SQLite数据库存储
前面一讲介绍了数据持久化技术的前两种:文件存储.SharedPreferences存储.下面介绍第三种技术:SQLite数据库存储 一.SQLite数据库存储 SQLite数据库是一款轻量级的关系型数 ...
- Android学习之基础知识九—数据存储(持久化技术)
数据持久化是将那些内存中的瞬时数据保存到存储设备,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. Android系统中主要提供了3种方式用于简单地实现数据持久化功能:文件存储.SharedP ...
- 基于ActiveMQ的Topic的数据同步——消费者持久化
前面一章中介绍了activemq的初步实现:基于ActiveMQ的Topic的数据同步——初步实现 下面来解决持久化订阅的问题: (1)使用queue,即队列时,每个消息只有一个消费者,所以,持久化很 ...
- docker数据卷之持久化操作
docker Docker三大核心组件:(运行起来的镜像就可以称作容器) Docker 镜像--Dcoker images:类比与类 Docker 仓库--Docker registeries: Do ...
随机推荐
- 【HDOJ】1720 A+B coming
水题. #include <stdio.h> #include <string.h> #define MAXNUM 1005 int stoi(char); int main( ...
- apache开源项目--lucence
Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Lucene的目的是为软件开发人员提供一个简单易用 ...
- Android 所有颜色代码
colors.xml <?xml version="1.0" encoding="utf-8" ?> <resources> <c ...
- Android ViewPager多页面滑动切换以及动画效果
一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式,白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了, ...
- NESPER的大体结构 z
NEsper从内容上分为两块,NEsper的核心NEsper.dll和NEsper.IO.dll. (1)NEsper的核心包包含了EPL语法解析引擎,事件监听机制,事件处理等核心模块. (2)NEs ...
- POJ 1185 (状态压缩DP)
中文题目,题意就不说了. 不得不说这是一道十分经典的状态压缩DP的题目. 思路: 通过分析可以发现,第i行的格子能不能放大炮仅与第i-1和i-2行的放法有关,而与前面的放法无关,因此,如果我们知道了i ...
- [Stephen]关于Ext.net fileupload 的兼容性解决问题
在firefox下,利用fileupload上传图片后,通过后端将image 的src路径进行更新,刷新前段界面显示没有问题. 但是在以IE为内核的360中,这种上传后的更新导致一个命名为Action ...
- 字典转模型第三方框架---MJExtension
字典转模型第三方框架 Mantle 所有模型都必须继承自MTModel JSONModel 所有模型都必须继承自JSONModel MJExtension 不需要强制继承任何其他类 设计框架需要考虑的 ...
- linux驱动程序之电源管理之regulator机制流程 (1)
电源管理芯片可以为多设备供电,且这些设备电压电流有所同.为这些设备提供的稳压器代码模型即为regulator. 下面通过下面三个过程分析regulartor供电机制: 1.分析regulator结构体 ...
- Java笔记(十四)……抽象类与接口
抽象类概念 抽象定义: 抽象就是从多个事物中将共性的,本质的内容抽取出来. 例如:狼和狗共性都是犬科,犬科就是抽象出来的概念. 抽象类: Java中可以定义没有方法体的方法,该方法的具体实现由子类完成 ...