• 持久化存储---归档一


    一、流程图

    二、代码

    1.模型归档

    (1)

    @interface Person : NSObject<NSCoding>//归档调用的方法
    - (void)encodeWithCoder:(NSCoder *)aCoder{
        [aCoder encodeObject:self.name forKey:@"name"];
        [aCoder encodeInteger:self.age forKey:@"age"];
        [aCoder encodeObject:self.address forKey:@"adress"];
        [aCoder encodeObject:self.photo forKey:@"photo"];
    }
    //反归档调用的方法
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{
        if (self = [super init]) { 
            self.name = [aDecoder decodeObjectForKey:@"name"];
            self.age = [aDecoder decodeIntegerForKey:@"age"];
            self.address = [aDecoder decodeObjectForKey:@"adress"];
            self.photo = [aDecoder decodeObjectForKey:@"photo"];
        }
        return self;  
    }
    + (NSString *)getTheFilePath:(NSString *)filePath{
        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:filePath];
        return path;
    }

    (2)

        //1.归档类名:NSKeyedArchiver,解归档类名:NSKeyedUnarchiver
        //2.归档和解档的类必须遵守<NSCoding>,且必须实现- (void)encodeWithCoder:(NSCoder *)aCoder(归档,字段写入)和- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder(返归档的方法,根据key解出)
        //3.定义归档路径
        //4.调用归档和解档的方法
    //---------归档与解档一,存储模型,
     //归档
        //1.存储的路径
        //2.存储后的对象数据
        //3.创建归档工具
        //4.将对象按指定路径归档
    
        NSString *arcHome = [Person getTheFilePath:@"arcHome.archiver"];
    
        Person *person = [[Person alloc] init];
        person.name = @"";
        person.age = [@28 integerValue];
        person.address = @"以色列";
        person.photo = [UIImage imageNamed:@"Snip20170215_1"];
    
      
    BOOL isSucces
    = [NSKeyedArchiver archiveRootObject:person toFile:arcHome]; if (isSucces) { NSLog(@"%@",arcHome); } //解档 Person *persons = [NSKeyedUnarchiver unarchiveObjectWithFile:arcHome]; NSLog(@"name=%@age=%ldadress=%@photo=%@",persons.name,persons.age,persons.address,persons.photo);

    2.数组及字典其它方式归档

      

    //---------归档与解档三,存储数组或字典
        //1.存取的数据
        //2.存取的路径
        //3.准备存储数据的对象如NSMutableData
        //4.创建归档,开始归档对象,完成归档
        //5.写入文件中
        Person *students = [Person new];
        students.name = @"zi";
        students.age = [@18 integerValue];
        students.address = @"shanghai";
        students.photo = [UIImage imageNamed:@"1.png"];
        
        NSString *dataPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"dataPath.archiver"];
        
        NSMutableData *data = [NSMutableData data];
        
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
        [archiver encodeObject:students forKey:@"archiver"];
        [archiver finishEncoding];
        
        BOOL result = [data writeToFile:dataPath atomically:YES];
        if (result) {
            NSLog(@"写入成功");
        }else{
            NSLog(@"写入失败");
        }
        
        //----解档
        //1.准备解档路径,根据存储路径来返回Data
        //2.创建反归档对象
        //3.反归档
        //4.完成反归档
        NSData *studentData = [NSData dataWithContentsOfFile:dataPath];
        NSKeyedUnarchiver *unarch = [[NSKeyedUnarchiver alloc] initForReadingWithData:studentData];
        Person *stu = [unarch decodeObjectForKey:@"archiver"];
        [unarch finishDecoding];
        
        NSLog(@"student-->%@--%ld--%@--%@",stu.name,stu.age,stu.address,stu.photo);
    将来的自己,会感谢现在不放弃的自己!
  • 相关阅读:
    java编写socket使用bufferedReader.readLine()问题研究
    stage3D基础五-----Working with 3D cameras(转)
    stage3D基础四----Stage3D和透视投影的使用(转)
    stage3D基础三------什么是AGAL(转)
    stage3D基础二-----顶点和片段着色器(转)
    stage3D基础一-----Stage3D如何工作(转)
    OpenGL/GLSL数据传递小记(3.x)(转)
    OpenGL/GLSL数据传递小记(2.x)(转)
    Away3D引擎学习笔记(二)CameraController相机控制的应用
    I-team 博客全文检索 Elasticsearch 实战
  • 原文地址:https://www.cnblogs.com/TheYouth/p/6401720.html
Copyright © 2020-2023  润新知