iOS数据持久化-归档NSKeyedArchiver

来源:互联网 发布:数据统计分析员招聘 编辑:程序博客网 时间:2024/05/16 01:40

归解档操作(NSKeyedArchiver/NSKeyedUnArchiver)通过对自定义对象进行操作。归解档后的自定义对象很方面进行持久化操作,方便于对象以文件的形式进行存储。归解档的对象需要实现NSCoding协议。

1、自定义对象实现NSCoding协议


@interface UserModel : NSObject<NSCoding>

@property(nonatomic,copy)NSString *name;@property(nonatomic,assign)NSInteger age;@property(nonatomic,assign)BOOL sex;@end

#import "UserModel.h"@implementation UserModel//归档-(void)encodeWithCoder:(NSCoder *)aCoder{        [aCoder encodeObject:self.name forKey:@"name"];    [aCoder encodeInteger:self.age forKey:@"age"];    [aCoder encodeBool:self.sex forKey:@"sex"];    }//解档- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{    if([self init]){            self.name = [aDecoder decodeObjectForKey:@"name"];        self.age = [aDecoder decodeIntegerForKey:@"age"];        self.sex = [aDecoder decodeBoolForKey:@"sex"];    }    return  self;}

2、使用NSKeyedArchiver进行对象归档

- (void)persistArchived{    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;    NSString *filePath = [path stringByAppendingPathComponent:@"user.data"];    UserModel *user =[[UserModel alloc]init];    user.name = @"zhangsan";    user.age= 50;    user.sex = NO;    //调用NSKeyedArchiver 工厂方法实现归档:    [NSKeyedArchiver archiveRootObject:user toFile:filePath];   //解档:从文件中解档对象就调用NSKeyedUnarchiver的一个工厂方法 unarchiveObjectWithFile:。    UserModel *unarchiverUser = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];        NSLog(@"unarchiverUser-name%@,unarchiverUser-name%d, unarchiverUser-age%ld", unarchiverUser.name, unarchiverUser.sex, unarchiverUser.age);}

如果需要归档的类是某个自定义类的子类时,就需要在归档和解档之前先实现父类的归档和解档方法。 [super encodeWithCoder:aCoder] 和 [super initWithCoder:aDecoder] 方法;

建议对象也同时实现NSCopying协议,该协议允许复制对象,要实现NSCopying协议须实现 -(id)copyWithZone:(NSZone *)zone 方法 。

保存的文件的扩展名可以任意指定。

0 0