UI进阶数据本地化之复杂对象本地化操作

首先创建Person类,继承与NSObject 遵循<NSCoding>,并建立属性

Person.h中:

@property(nonatomic,copy)NSString *name;

@property(nonatomic,copy)NSString *sex;

@property(nonatomic,assign)NSUInteger age;

//属性的作用

//声明set get方法

//实现set get方法

//声明一个以下划线开头命名的一个成员变量


Person.m中: 归解档

//归档

//在归档和解档的时候,要把所有的属性都进行归解档

-(void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeObject:self.sex forKey:@"sex"];

[aCoder encodeInteger:self.age forKey:@"age"];

}

//解档

-(instancetype)initWithCoder:(NSCoder *)aDecoder{

self=[super init];

if (self) {

self.name=[aDecoder decodeObjectForKey:@"name"];

self.sex=[aDecoder decodeObjectForKey:@"sex"];

self.age=[aDecoder decodeIntegerForKey:@"age"];

}

return self;

}


ViewController.m中


//如果一个对象想直接写入本地,那么这个对象需要遵守NDCoding协议


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


Person *person=[[Person alloc]init];


person.name = @"队长";

person.sex = @"男";

person.age = 38;


//将复杂对象归档之后存入本地

//第一步:创建一个NSMutableData,用于初始化归档工具

NSMutableData *data = [NSMutableData data];

NSLog(@"data==%@",data);


//第二步 :创建归档工具

NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

NSLog(@"data1==%@",data);


//第三步:使用归档工具  对需要归档对象进行归档

[keyedArchiver encodeObject:person forKey:@"person"];

NSLog(@"data2==%@",data);


//第四步:结束归档

[keyedArchiver finishEncoding];

NSLog(@"data3==%@",data);


NSString *dataPath = [documentPathStr stringByAppendingPathComponent:@"data.plist"];


[data writeToFile:dataPath atomically:YES];

NSLog(@"datapath==%@",documentPathStr);


#pragma mark--解档使用


//第一步:从本地获取到Data

NSMutableData *newdata = [NSMutableData dataWithContentsOfFile:dataPath];

NSLog(@"data==%@",newdata);


//第二步:通过获取到的data 创建一个解档工具

NSKeyedUnarchiver *keyedUnarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:newdata];


//第三步:创建一个person对象接收解档结果

Person *newperson = [keyedUnarchiver decodeObjectForKey:@"person"];


//第四步:结束解档

[keyedUnarchiver finishDecoding];

NSLog(@"person==%@",newperson.name);


//归解档是一种编码方式,不是数据本地化的方式

//复杂对象写入本地实际上使用的还是wirteToFile得简单写入本地的方法

//直接写入本地 是整存整取

//在一个路径下存数据,最后一次存进去的东西会覆盖掉之前的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容