ios 数据持久化之自定义模型的存储
2015-11-24 09:48
489 查看
开通微博第一天 谢谢支持
数据持久化之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];
数据持久化之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];
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器