ios 数据持久化之自定义模型的存储

本文介绍了如何使用NSKeyedArchiver进行iOS应用中的数据持久化,特别是针对自定义模型对象的存储。文章通过示例代码展示了如何实现遵循NSCoding协议的自定义模型类,以及如何保存和加载这些模型到沙盒中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开通微博第一天  谢谢支持


数据持久化之NSKeyedArchiver


   基本的数据类型如NSString、NSDictionary、NSArray、NSData、NSNumber等可以用属性列表的方法持久化到.plist 文件中,但如果是一些自定义的类的话,属性列表的方法就不管用了。archiver 方法可以做到。

  如果是自定义的模型,要实现数据持久化,自定义的模型要遵循NSCoding  协议。

NSCoding 是一个简单的协议,有两个方法: -initWithCoder: 和 encodeWithCoder:。遵循NSCoding协议的类可以被序列化和反序列化,这样可以归档到磁盘上或分发到网络上

废话不多说 直接上代码

.h文件

#import <Foundation/Foundation.h>


@interface HFAccount : NSObject <NSCoding>

/** string接口获取后的access token*/

@property (nonatomic,copy) NSString *access_token;


/** 单位是秒数。*/

@property (nonatomic,copy) NSNumber *expires_in;


/** string当前用户的UID*/

@property (nonatomic,copy) NSString *uid;





@end


.m文件

#import "HFAccount.h"


@implementation HFAccount



/**

 *  当一个对象要归档进沙盒中时,就会调用这个方法

 *  目的:在这个方法中说明这个对象的哪些属性要存进沙盒

 */

- (void)encodeWithCoder:(NSCoder *)encoder

{

    [encoder encodeObject:self.access_tokenforKey:@"access_token"];

    [encoder encodeObject:self.expires_inforKey:@"expires_in"];

    [encoder encodeObject:self.uidforKey:@"uid"];

}


/**

 *  当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法

 *  目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)

 */

- (id)initWithCoder:(NSCoder *)decoder

{

    if (self = [superinit]) {

        self.access_token = [decoderdecodeObjectForKey:@"access_token"];

        self.expires_in = [decoderdecodeObjectForKey:@"expires_in"];

        self.uid = [decoderdecodeObjectForKey:@"uid"];

    }

    returnself;

}

@end



在你需要存储的地方

HFAccount *account = [[HFAccount alloc]init];

然后给你的模型赋值

  // 自定义对象的存储必须用NSKeyedArchiver,不再有什么writeToFile方法

    [NSKeyedArchiverarchiveRootObject:account toFile:HWAccountPath];

解档

// 加载模型

    HFAccount *account = [NSKeyedUnarchiverunarchiveObjectWithFile:HWAccountPath];







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值