iOS-初级数据持久化_复杂对象的存储-自定义Student类

iOS-初级数据持久化_复杂对象的存储-自定义Student类
iOS-初级数据持久化_复杂对象的存储-自定义Student类
iOS-初级数据持久化_复杂对象的存储-自定义Student类
iOS-初级数据持久化_复杂对象的存储-自定义Student类

//
// ViewController.m
// 初级数据持久化_复杂对象的存储-自定义Student类
//
// Created by YIem on 16/3/2.
// Copyright © 2016年 YIem. All rights reserved.
//

import "ViewController.h"

import "Student.h"

@interface ViewController ()

@end

@implementation ViewController

  • (void)viewDidLoad {

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor greenColor];
    
    NSString *fileStr =  [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    
    
    
    Student *stu = [[Student alloc] init];
    stu.name = @"YIem";
    stu.sex = @"男";
    stu.age = 21;
    stu.score = 0.1;
    
    NSString *stuPath = [fileStr stringByAppendingPathComponent:@"/stu.aaa"];
    // 存储复杂类型数据要进行归档 读取进行反归档
    // 归档时会调用NSConding协议方法, 需要在Student类中实现
    // 参数1: 内容
    // 参数2: 文件
    [NSKeyedArchiver archiveRootObject:stu toFile:stuPath];
    // 反归档
    Student *backStu = [NSKeyedUnarchiver unarchiveObjectWithFile:stuPath];
    NSLog(@"姓名: %@ 性别: %@ 年龄: %ld 分数: %.1f", backStu.name, backStu.sex, backStu.age, backStu.score);
    

    }

  • (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

    }

@end



//
// Student.h
// 初级数据持久化_复杂对象的存储
//
// Created by YIem on 16/3/2.
// Copyright © 2016年 YIem. All rights reserved.
//

import <Foundation/Foundation.h>

import <UIKit/UIKit.h>

@interface Student : NSObject <NSCoding>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *sex;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, assign) CGFloat score;
@end


//
// Student.m
// 初级数据持久化_复杂对象的存储
//
// Created by YIem on 16/3/2.
// Copyright © 2016年 YIem. All rights reserved.
//

import "Student.h"

@implementation Student

  • (void)dealloc
    {

    [_name release];
    [_sex release];
    [super dealloc];

    }

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

    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.sex forKey:@"sex"];
    // *注意: 不同类型数据应用不同方法
    // key可以不与属性同名, 仅仅用来供反归档时对应
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeDouble:self.score forKey:@"score"];

    }

// 用与上面同名

  • (instancetype)initWithCoder:(NSCoder *)aDecoder
    {
    self = [super init];
    if (self) {

    self.name = [aDecoder decodeObjectForKey:@"name"];
    self.sex = [aDecoder decodeObjectForKey:@"sex"];
    self.age = [aDecoder decodeIntegerForKey:@"age"];
    self.score = [aDecoder decodeDoubleForKey:@"score"];

    }
    return self;
    }

@end