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);






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值