• [Objective-C] 011_数据持久化_NSKeyedArchiver


    在日常开发中对于NSString、NSDictionary、NSArray、NSData、NSNumber这些基本类的数据持久化,可以用属性列表的方法持久化到.plist 文件中。但是一些我们自定义的类的话,属性列表的方法就不能用了,这时候是NSKeyedArchiver出马的时候了。以我们前面写的Person 类为例,看NSKeyedArchiver 如何一展身手。

    Person 类

    //////////////////     .h     ////////////////
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject<NSCoding>
    
    @property (nonatomic,copy)NSString *name;
    @property (nonatomic,assign)int age;
    @property (nonatomic,copy)NSString *sex;
    
    - (void)printInfo;
    @end
    
    //////////////////     .m    ////////////////
    #import "Person.h"
    
    @implementation Person
    @synthesize name = _name,sex = _sex;
    @synthesize age = _age;
    
    //写入文件
    -(void)encodeWithCoder:(NSCoder *)encoder{
        [encoder encodeInt:self.age forKey:@"age"];
        [encoder encodeObject:self.name forKey:@"name"];
        [encoder encodeObject:self.sex forKey:@"sex"];
    }
    
    //从文件中读取
    -(id)initWithCoder:(NSCoder *)decoder{
        self.age = [decoder decodeIntForKey:@"age"];
        self.name = [decoder decodeObjectForKey:@"name"];
        self.sex = [decoder decodeObjectForKey:@"sex"];
        return self;
    }
    
    - (void)printInfo {
        NSLog(@"我的名字叫:%@ 今年%d岁 我是一名%@ %@",self.name,self.age,self.sex,NSStringFromClass([self class]));
    }
    
    @end

    AppDelegate.m 中测试

    #import "AppDelegate.h"
    #import "Person.h"
    
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        Person *person = [[[Person alloc] init] autorelease];
        person.age = 18;
        person.sex = @"男";
        person.name = @"SuperDo.Horse";
        
        //获得Document的路径
        NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        NSString *path = [documents stringByAppendingPathComponent:@"person.archiver"];//拓展名可以自定义
        [NSKeyedArchiver archiveRootObject:person toFile:path];
        
        Person *person2 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
        [person2 printInfo];
        
        return YES;
    }
    
    @end
    

    打印结果:  

    2015-07-05 22:37:48.876 Attendance[80142:2069100] 我的名字叫:SuperDo.Horse 今年18我是一名男 Person

      

     

    本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 
    转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4623177.html

     

  • 相关阅读:
    饮冰三年-人工智能-linux-03 Linux文件管理(权限管理+归档+压缩)
    饮冰三年-人工智能-linux-02 初始Linux
    饮冰三年-人工智能-linux-01通过VM虚拟机安装contes系统
    测试joinablequeue
    生产者消费者模型
    队列
    优化抢票
    昨日回顾
    抢票小程序
    守护进程
  • 原文地址:https://www.cnblogs.com/superdo/p/4623177.html
Copyright © 2020-2023  润新知