美文网首页
归档和解归档

归档和解归档

作者: su_19 | 来源:发表于2016-04-05 21:13 被阅读89次

基本数据持久化:把OC中的基本数据存储到沙盒中。
归档:把复杂类型转为data类型的过程。
解归档:把data类型转为复杂类型的过程。
NSCoding



//======car.h========
#import <Foundation/Foundation.h>

@interface YTCar : NSObject <NSCoding>
//颜色
@property(nonatomic, copy) NSString * color;
//价格
@property(nonatomic, assign) double price;

@end


//========car.m==========
#import "YTCar.h"

@implementation YTCar

//将所有属性归档
- (void)encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:_color forKey:@"color"];
    
    [aCoder encodeDouble:_price forKey:@"price"];
}

//将所有属性解归档
- (id)initWithCoder:(NSCoder *)aDecoder{

    if (self = [super init]) {
        
        _color = [aDecoder decodeObjectForKey:@"color"];
        _price = [aDecoder decodeDoubleForKey:@"price"];
    }
    
    return self;
}

@end


#import <Foundation/Foundation.h>
@class YTCar;

@interface YTPerson : NSObject <NSCoding>
//姓名
@property(nonatomic, copy) NSString * name;

//车
@property(nonatomic, strong) YTCar * car;


@end


//=======preson.m========

#import "YTPerson.h"
#import "YTCar.h"

@implementation YTPerson

//将所有希望归档的属性都归档
- (void)encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeObject:_car forKey:@"car"];
}

//解归档
- (id)initWithCoder:(NSCoder *)aDecoder{

    if (self = [super init]) {
        
        _name = [aDecoder decodeObjectForKey:@"name"];
        _car = [aDecoder decodeObjectForKey:@"car"];
        
    }
    
    return self;
}

@end


//=====main========

#import <Foundation/Foundation.h>
#import "YTPerson.h"
#import "YTCar.h"

#define PATH @"/Users/yuting/Desktop/授课/CD1601/OC阶段/day5-归档和解归档/Person"

//如果需要归档的对象的属性中有另外一个类的对象,让两个类都遵守NSCoding协议并且实现协议方法,去归档和解归档相应的属性。
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        YTPerson * person = [[YTPerson alloc] init];
        person.name = @"小明";
        
        YTCar * bee = [[YTCar alloc] init];
        bee.color = @"yellow";
        bee.price = 50;
        
        person.car = bee;
        
        //归档
//        [NSKeyedArchiver archiveRootObject:person toFile:PATH];
        
        //解归档
        YTPerson * p = [NSKeyedUnarchiver unarchiveObjectWithFile:PATH];
        
        NSLog(@"%@ %@ %lf", p.name, p.car.color,p.car.price);
        
        
    }
    return 0;
}

相关文章

  • 归档和解归档

    基本数据持久化:把OC中的基本数据存储到沙盒中。归档:把复杂类型转为data类型的过程。解归档:把data类型转为...

  • iOS 归档和解归档

    归档与解档是IOS中一种序列化与反序列化的方式。对象要实现序列化需要遵循NSCoding协议,而绝大多数Found...

  • iOS 归档NSKeyedArchiver

    一、归档NSKeyedArchiver和解归档NSKeyedUnarchiver 1.首先确定存储路径。 NSHo...

  • 数据持久化-归档、解档

    模型对象实现归档和解档代理方法 解档 宏定义路径 归档 任何地方只要动了数组都要归档

  • iOS NSKeyedArchiver数据归档

    iOS中利用NSKeyedArchiver和NSKeyedUnarchiver进行数据的归档和解档操作。 归档 所...

  • swift 之归档和解归档

    数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储、...

  • 封装数据归档和解归档

    性能完善,使用简单。图1 - 效果示例 过程: 建立一个模型,一般即为你要存储数据的模型,我这里是用户数据。~1....

  • 归档(NSKeyedArchiver)与解归档(NSKeyUna

    NSKeyedAchiver&NSKeyUnarchiver的封装 归档和解归档是App数据持久化的方法之一。 归...

  • 复杂对象存入数组归档的方法如下

    复杂对象存入数组归档的方法如下: 注意: model对象 首先要实现 归档和解档方法例子:

  • ios 归档和解归档(利用runtime)

    前言 iOS存取数据的方式有几种,这次项目中存储一些小数据所以用的归档,希望对用归档存储数据的同学有帮助。 iOS...

网友评论

      本文标题:归档和解归档

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