码迷,mamicode.com
首页 > 其他好文 > 详细

Snail—OC学习之本地数据持久化(归档)

时间:2015-07-28 18:41:42      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:

#import <Foundation/Foundation.h>
#import "Dog.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        NSString * filePath = @"/Users/student/Desktop/snail/array.data";
        
        //对官方类创建的对象进行存储
        NSArray * array = @[@"one",@"two",@"three"];
        
        //-------------------------归档--------------------------
        //将array归档为文件 后缀一般为.data  .data文件是二进制文件 打不开
        /*
         参数
         第一个参数 归档的对象
         第二个参数 文件的路径
         */
        [NSKeyedArchiver archiveRootObject:array toFile:filePath];
        
        
        //-------------------------解档--------------------------
        NSArray * arr = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
        /*
         (
         one,
         two,
         three
         )
         */
        NSLog(@"%@",arr);
        
        
        
        //------------对自定义类型的对象进行归、解档-----------------
        /*
         对自定义类型的对象进行归档时,需要实现一个协议(NSCoding),并且实现协议中得方法
         新建一个dog类 里面有名字name和age属性
         */
        NSString * dogPath = @"/Users/student/Desktop/snail/dog.data";
        Dog * dog = [[Dog alloc] init];
        dog.name = @"刀刀";
        dog.age = 23;
        
        //----------------------归档--------------------
        BOOL ret1 = [NSKeyedArchiver archiveRootObject:dog toFile:dogPath];
        if (ret1) {
            NSLog(@"归档成功");
        }else{
            NSLog(@"失败");
        }
        
        //----------------------解档--------------------
        Dog * dog1 = [NSKeyedUnarchiver unarchiveObjectWithFile:dogPath];
        NSLog(@"%@",dog1.name);
    }
    return 0;
}


Dog.h

#import <Foundation/Foundation.h>

//NSCoding 实现这个协议
@interface Dog : NSObject <NSCoding>

@property NSString * name;
@property int age;


@end

Dog.m

#import "Dog.h"

@implementation Dog


//归档自定义对象时调用的方法
- (void)encodeWithCoder:(NSCoder *)aCoder{
    
    //key的值是可以随便写的 但是在解档的方法里 要跟key的值一样的
    
    //name是NSString类型 用encodeObject方法
    [aCoder encodeObject:self.name forKey:@"NAME"];
    //age是int类型,用encodeInt方法
    [aCoder encodeInt:self.age forKey:@"AGE"];
}


//解档自定义对象时调用的方法
- (id)initWithCoder:(NSCoder *)aDecoder{
    
    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"NAME"];
        self.age = [aDecoder decodeIntForKey:@"AGE"];
    }
    return self;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

Snail—OC学习之本地数据持久化(归档)

标签:

原文地址:http://blog.csdn.net/qq1791422018/article/details/47107787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!