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

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

时间:2015-07-05 23:46:40      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

在日常开发中对于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

 

 

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

标签:

原文地址:http://www.cnblogs.com/superdo/p/4623177.html

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