UISenior之数据的本地化持久化

数据的本地化主要分为两个方面:1.简单数据的本地持久化(NSString、NSArray、NSDictionary、NSData)2.复杂数据的本地持久化(本文以Person类为例)

简单对象的本地化:

简单对象的本地化基本可以分为四步:

第一步:找到Documents的文件夹的路径。

第二步:我们要知道存储什么,所以要创建存储的对象

第三步:需要知道字符串最终的存储的地方,所以需要创建一个路径去存储字符串

第四步:准备工作完成,将字符串写入文件

下面具体实现上述四步:

第一步

  1. //    第一步:需要知道这个对象存在哪里,所以需要一个文件夹的路径
  2. //    找到Documents文件夹路径
  3. NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

第二步

  1. //    第二步:我们知道要存储什么?所以需要创建什么
  2. //    创建要存储的内容:字符串
  3. NSString *str = @"AJAR";

第三步

  1. //    第三步:需要知道字符串最终存储的地方,所以需要创建一个路径去存储字符串
  2. NSString *strPath = [documents stringByAppendingPathComponent:@"zhy.txt"];

第四步

  1. <span style="color:#000000;">//    第四步:准备工作完成,将字符串写入文件
  2. //    第一个参数:写入的文件的一个路径
  3. //    第二个参数:在断电的情况下,会不会自动保存
  4. //    第三个参数:编码格式
  5. //    第四个参数:错误信息
  6. [str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
  7. NSLog(@"strPath = %@", strPath);</span>

将NSString文件夹存储的内容取出

  1. //    将字符串取出:使用stringWithContentsOfFile这个方法将其取出
  2. //    第一个参数:字符串存储的路径
  3. //    第二个参数:编码格式
  4. //    第三个参数:错误信息
  5. NSString *newStr = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
  6. NSLog(@"newStr = %@", newStr);

复杂对象的本地化:

复杂对象的本地化最重要的两步就是归档和解档

本文以Person对象为例,首先创建Person类继承于NSObject

Person.h文件

  1. ///姓名
  2. @property(nonatomic, copy)NSString *name;
  3. ///性别
  4. @property(nonatomic, copy)NSString *gender;
  5. ///年龄
  6. @property(nonatomic, assign)NSInteger age;

Person.m文件中 需要重写归档和解档的方法

  1. //归档
  2. //将所有的属性进行归档
  3. -(void)encodeWithCoder:(NSCoder *)aCoder {
  4. [aCoder encodeObject:self.name forKey:@"name"];
  5. [aCoder encodeObject:self.gender forKey:@"gender"];
  6. [aCoder encodeInteger:self.age forKey:@"age"];
  7. }
  8. //解档(反归档)
  9. - (instancetype)initWithCoder:(NSCoder *)aDecoder {
  10. self = [super init];
  11. if (self) {
  12. self.name = [aDecoder decodeObjectForKey:@"name"];
  13. self.gender = [aDecoder decodeObjectForKey:@"gender"];
  14. self.age = [aDecoder decodeIntegerForKey:@"age"];
  15. }
  16. return self;
  17. }

在ViewController里对Person对象进行操作

找到Documents文件夹的目录

  1. NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

创建Person对象

  1. <span style="font-size:14px;">    Person *per = [[Person alloc] init];
  2. per.name = @"MBboy";
  3. per.gender = @"boy";
  4. per.age = 18;</span>

把这个复杂对象归档

  1. //   创建NSMutableData,用于创建初始化归档工具的
  2. NSMutableData *data = [NSMutableData data];
  3. NSLog(@"======data = %@====", data);
  4. //   创建归档工具
  5. NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
  6. //   对要归档的person对象进行归档
  7. [archiver encodeObject:per forKey:@"person"];
  8. //   结束归档
  9. [archiver finishEncoding];
  10. NSLog(@"======data = %@====", data);

将归档的内容NSMutableData存储在本地

  1. NSString *personPath = [documentPath stringByAppendingPathComponent:@"person.plist"];

写入

  1. [data writeToFile:personPath atomically:YES];
  2. NSLog(@"personPath = %@", personPath);

解档

将要解档的数据找出来

  1. NSData *resultData = [NSData dataWithContentsOfFile:personPath];
  2. NSLog(@"resultData = %@", resultData);

创建解档工具

  1. NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:resultData];

对person对象进行解档[使用对象接收]

  1. Person *newPer = [unarchiver decodeObjectForKey:@"person"];

结束解档

    1. [unarchiver finishDecoding];
    2. NSLog(@"name = %@ gender = %@ age = %ld", newPer.name, newPer.gender, newPer.age);
时间: 2024-08-06 22:22:42

UISenior之数据的本地化持久化的相关文章

IOS开发中关于数据的本地化存储

对于IOS开发者而言, 项目中数据的本地化存储,最难的一点,莫过于SQL语句的编写,除此之外, 其实也没什么难度, 当然在创建数据库之前,我们必须要做的是对数据进行分析, 然后对FMDB进行简单的封装: 代码如下: #import "SQLiteManger.h" #import "FMDB.h" @interface SQLiteManger () @end @implementation SQLiteManger /// 创建一个单例单例 +(instancet

Android基础总结(5)——数据存储,持久化技术

瞬时数据:指那些存储在内存当中,有可能会因为程序广播或其他原因导致内存被回收而丢失的数据. 数据持久化:指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不丢失. 保存在内存中的数据是瞬时数据,保存在手机设备中的数据是处于持久状态的,持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行切换.Android系统中主要提供了三种方式用于简单地实现数据持久化功能: 文件存储:是Android中最基本的一种数据存储方式.不对存储内容做任何的格式化处理,

docker数据卷之持久化操作

docker Docker三大核心组件:(运行起来的镜像就可以称作容器) Docker 镜像--Dcoker images:类比与类 Docker 仓库--Docker registeries: Docker 容器-- Dcoker conrainers:类比于实例化的对象 仓库(registry)--repo(Repository)-->镜像(按版本区分) 共有库 docker.io 私有库 yum库-->不同repo-->软件(按名字区分) docker底层原理 Docker是一个c

NopCommerce 3.80数据访问与持久化(一)

  NopCOmmerce 是一个国外的开源电商系统.3.80版本使用EF6.0 和.Net Framework 4.5.1 并引入了Autofac , Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高. 关于 Autofac 可以参考 原油 的文章 :http://www.cnblogs.com/jys509/p/4649798.html 本系列文章要用于记录研究笔记,废话不多可以当参考文档看看.  

Plist 文件的多次读写,实现IOS数据的本地化处理,实现小量数据的本地化处理

废话少说,直接上代码: (void)viewDidLoad { [super viewDidLoad]; //读取plist文件在程序文件夹中的文件,并且要注意,程序文件的文件只能读不能写,只能在程序沙盒之中: NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"plisttest" ofType:@"plist"]; NSLog(@"这是plist文件的路径%@", pl

Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库

上一节学习了使用SQLiteDatabase来操作SQLite数据库的方法,接下来我们开始接触第一个开源库:LitePal.LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作,LitePal的项目主页上也有详细的使用文档,地址是: https://github.com/LitePalFramework/LitePal 一.配置LitePal 要在

Spark数据本地化--&gt;如何达到性能调优的目的

Spark数据本地化-->如何达到性能调优的目的 1.Spark数据的本地化:移动计算,而不是移动数据 2.Spark中的数据本地化级别: TaskSetManager 的 Locality Levels 分为以下五个级别: PROCESS_LOCAL  NODE_LOCAL NO_PREF    RACK_LOCAL ANY PROCESS_LOCAL   进程本地化:task要计算的数据在同一个Executor中     NODE_LOCAL    节点本地化:速度比 PROCESS_LOC

ios学习笔记-数据持久化

沙盒 沙盒是一种数据安全策略,只允许自己的应用访问目录.可以使用NSHomeDirectory()获取. ios沙盒下有三个子目录: 1.Documents目录:用于存储比较大的文件活着需要频发女更新的数据,需要持久化的数据.获取代码: NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 2.Library目录:

高级数据持久化之coredata

一.概述 CoreData是一个用于数据持久化的框架,Core Data支持4种类型的数据存储:SQLiteStore, XMLStore, BinaryStore, InMemoryStore. 注意:CoreData大部分情况下是基于SQLite数据库进行数据管理的,所以以下全部是其基于SQLite数据库的内容,以后学到更多的管理方法在补充! Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,