美文网首页
04-归档解档

04-归档解档

作者: AlanGe | 来源:发表于2017-08-16 01:42 被阅读26次

    归档解档步骤:

    1、遵循协议:<NSCoding>
    2、实现编码解码这两个方法
    // 编码(对象 -> 二进制):告诉系统,归档时,保存哪些属性
    -(void)encodeWithCoder:(NSCoder *)aCoder {}
    // 解码(二进制 -> 对象):告诉系统,解档时,初始化那些属性
    -(nullable instancetype)initWithCoder:(NSCoder *)aDecoder {

    3、调用归档解档方法
    // 2. 实现<NSCoding>协议的encodeWithCoder:方法,告诉系统保存哪些属性
    [NSKeyedArchiver archiveRootObject:person toFile:filePath];
    // 2.解档
    GEPerson *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

    /*********** *********** GEPerson *********** ***********/
    //  GEPerson.h
    //  归档解档
    // 1.遵循协议
    // 2.实现编码解码这两个方法
    
    #import <Foundation/Foundation.h>
    #import "GEComputer.h"
    
    // 1.遵循协议
    @interface GEPerson : NSObject <NSCoding>
    @property (nonatomic,copy) NSString *name;
    @property (nonatomic,assign) NSInteger age;
    @property (nonatomic,strong) GEComputer *computer;
    @end
    
    //  GEPerson.m
    //  归档解档
    
    #import "GEPerson.h"
    
    @implementation GEPerson
    // 2.实现编码解码这两个方法
    // 编码(对象 -> 二进制):告诉系统,归档时,保存哪些属性
    - (void)encodeWithCoder:(NSCoder *)aCoder {
        [aCoder encodeObject:_name forKey:@"name"];
        [aCoder encodeInteger:_age forKey:@"age"];
        [aCoder encodeObject:_computer forKey:@"computer"];
    }
    // 解码(二进制 -> 对象):告诉系统,解档时,初始化那些属性
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
        if (self = [super init]) {
            _name = [aDecoder decodeObjectForKey:@"name"];
            _age = [aDecoder decodeIntegerForKey:@"age"];
            _computer = [aDecoder decodeObjectForKey:@"computer"];
        }
        return self;
    }
    @end
    
    /*********** *********** GEComputer *********** ***********/
    //  GEComputer.h
    //  归档解档
    
    #import <Foundation/Foundation.h>
    
    @interface GEComputer : NSObject<NSCoding>
    @property (nonatomic,copy) NSString *systemName;
    @end
    
    //  GEComputer.m
    //  归档解档
    
    #import "GEComputer.h"
    
    @implementation GEComputer
    -(void)encodeWithCoder:(NSCoder *)aCoder{
        [aCoder encodeObject:_systemName forKey:@"systemName"];
    }
    -(instancetype)initWithCoder:(NSCoder *)aDecoder{
        if (self = [super init]) {
            _systemName = [aDecoder decodeObjectForKey:@"systemName"];
        }
        return self;
    }
    @end
    
    /*********** *********** ViewController *********** ***********/
    //  ViewController.m
    //  归档解档
    
    #import "ViewController.h"
    #import "GEPerson.h"
    #import "GEComputer.h"
    
    @interface ViewController ()
    @end
    
    @implementation ViewController
    
    /**
     归档:保存自定义的数据类型
     */
    - (void)viewDidLoad {
        [super viewDidLoad];
        // 打印沙盒路径
        NSLog(@"沙盒路径:%@",NSHomeDirectory());
        // 归档
        [self saveData];
        // 解档
        [self readData];
    }
    
    // 归档
    -(void)saveData {
        // 1.创建自定义的对象
        GEComputer *computer = [GEComputer new];
        computer.systemName = @"Mac OS";
        
        GEPerson *person = [GEPerson new];
        person.name = @"Jack";
        person.age = 18;
        person.computer = computer;
        
        // 2.归档
        // 2.1 拼接文件路径
        NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        NSString *filePath = [documents stringByAppendingPathComponent:@"person.data"];
        
        // 2.2 实现<NSCoding>协议的encodeWithCoder:方法,告诉系统保存哪些属性
        [NSKeyedArchiver archiveRootObject:person toFile:filePath];
    }
    
    // 解档
    -(void)readData {
        // 1.获取文件路径
        NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        NSString *filePath = [documents stringByAppendingPathComponent:@"person.data"];
        
        // 2.解档
        GEPerson *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
        
        NSLog(@"解档: 名字 = %@,年龄 = %ld,电脑系统 = %@",person.name,person.age,person.computer.systemName);
    }
    @end
    

    相关文章

      网友评论

          本文标题:04-归档解档

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