自定义对象归档(解档)

来源:互联网 发布:安卓免费源码网 编辑:程序博客网 时间:2024/06/05 05:16

首先自定义一个Person对象
person.h里的内容 (注意要遵守NSCoding协议)

@interface Person : NSObject <NSCoding>@property (nonatomic,copy) NSString *name;@property (nonatomic,assign) NSUInteger age;@end

Person.m里要实现归档、解档的方法

@implementation Person// 在对象归档的时候调用// 那些属性需要归档// 这些属性怎么归档- (void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:_name forKey:@"name"];    [aCoder encodeInteger:_age forKey:@"age"];}// 在对象解档的时候调用// 哪些属性需要解档// 这些属性怎么解档- (instancetype)initWithCoder:(NSCoder *)aDecoder{    if (self = [super init]) {        _name = [aDecoder decodeObjectForKey:@"name"];        _age = [aDecoder decodeIntegerForKey:@"age"];    }    return self;}@end

在SB中设置两个Button,存储和读取。然后在ViewController.m中实现它们的点击事件

- (IBAction)save:(UIButton *)sender{    // 定义一个Person对象    Person *p1 = [[Person alloc] init];    p1.name = @"zhansan";    p1.age = 20;    // 获得Cache的路径    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];    // 拼接文件路径    NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"];    // 归档Person对象    [NSKeyedArchiver archiveRootObject:p1 toFile:filePath];}- (IBAction)read:(UIButton *)sender{    // 获得Cache的路径    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];    // 拼接文件路径    NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"];    // 解档Person对象    Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];    NSLog(@"%@",p.name);}
1 0
原创粉丝点击