美文网首页
UI进阶数据本地化之复杂对象本地化操作

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

作者: 鬼鬼梦 | 来源:发表于2016-03-25 20:05 被阅读0次

    首先创建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得简单写入本地的方法

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

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

    相关文章

      网友评论

          本文标题:UI进阶数据本地化之复杂对象本地化操作

          本文链接:https://www.haomeiwen.com/subject/qnkdlttx.html