用户账号的归档和反归档(示例代码说明)
2016-01-21 16:57
393 查看
关于用户账号的归档和反归档的问题,现以代码示例如下:
1.首先创建一个用户账号的Model(以下创建为HWAccont)
HWAccount.H
@interface HWAccount :
NSObject <NSCoding>
/** string
用于调用access_token,接口获取授权后的access token。*/
@property (nonatomic,
copy) NSString *access_token;
/** string
access_token的生命周期,单位是秒数。*/
@property (nonatomic,
copy) NSNumber *expires_in;
/** string
当前授权用户的UID。*/
@property (nonatomic,
copy) NSString *uid;
+ (instancetype)accountWithDict:(NSDictionary *)dict;
记得遵守NSCoding协议!!
HWAccount.m
+ (instancetype)accountWithDict:(NSDictionary *)dict
{
HWAccount *account = [[self
alloc] init];
account.access_token = dict[@"access_token"];
account.uid = dict[@"uid"];
account.expires_in = dict[@"expires_in"];
return account;
}
/**
* 当一个对象要归档进沙盒中时,就会调用这个方法
* 目的:在这个方法中说明这个对象的哪些属性要存进沙盒
*/
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.access_token
forKey:@"access_token"];
[encoder encodeObject:self.expires_in
forKey:@"expires_in"];
[encoder encodeObject:self.uid
forKey:@"uid"];
}
/**
* 当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法
* 目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)
*/
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super
init]) {
self.access_token = [decoder
decodeObjectForKey:@"access_token"];
self.expires_in = [decoder
decodeObjectForKey:@"expires_in"];
self.uid = [decoder
decodeObjectForKey:@"uid"];
}
return
self;
}
2.在appdelegate 的didFinishLaunchingWithOptions方法里
// // 沙盒路径
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)
lastObject];
NSString *path = [doc
stringByAppendingPathComponent:@"account.archive"];
HWAccount *account = [NSKeyedUnarchiver
unarchiveObjectWithFile:path];
3.在登录界面的网络请求里
//
将返回的账号字典数据 -->
模型,存进沙盒
HWAccount *account = [HWAccount
accountWithDict:responseObject];
//
自定义对象的存储必须用NSKeyedArchiver,不再有什么writeToFile方法
[NSKeyedArchiver
archiveRootObject:account toFile:path];
其实,关于归档和反归档的方法,MJExtension做了很好的处理,可以使用。 我们也可以将存储账号信息封装成一个工具类,看自己喜好。
1.首先创建一个用户账号的Model(以下创建为HWAccont)
HWAccount.H
@interface HWAccount :
NSObject <NSCoding>
/** string
用于调用access_token,接口获取授权后的access token。*/
@property (nonatomic,
copy) NSString *access_token;
/** string
access_token的生命周期,单位是秒数。*/
@property (nonatomic,
copy) NSNumber *expires_in;
/** string
当前授权用户的UID。*/
@property (nonatomic,
copy) NSString *uid;
+ (instancetype)accountWithDict:(NSDictionary *)dict;
记得遵守NSCoding协议!!
HWAccount.m
+ (instancetype)accountWithDict:(NSDictionary *)dict
{
HWAccount *account = [[self
alloc] init];
account.access_token = dict[@"access_token"];
account.uid = dict[@"uid"];
account.expires_in = dict[@"expires_in"];
return account;
}
/**
* 当一个对象要归档进沙盒中时,就会调用这个方法
* 目的:在这个方法中说明这个对象的哪些属性要存进沙盒
*/
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.access_token
forKey:@"access_token"];
[encoder encodeObject:self.expires_in
forKey:@"expires_in"];
[encoder encodeObject:self.uid
forKey:@"uid"];
}
/**
* 当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法
* 目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)
*/
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super
init]) {
self.access_token = [decoder
decodeObjectForKey:@"access_token"];
self.expires_in = [decoder
decodeObjectForKey:@"expires_in"];
self.uid = [decoder
decodeObjectForKey:@"uid"];
}
return
self;
}
2.在appdelegate 的didFinishLaunchingWithOptions方法里
// // 沙盒路径
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)
lastObject];
NSString *path = [doc
stringByAppendingPathComponent:@"account.archive"];
HWAccount *account = [NSKeyedUnarchiver
unarchiveObjectWithFile:path];
3.在登录界面的网络请求里
//
将返回的账号字典数据 -->
模型,存进沙盒
HWAccount *account = [HWAccount
accountWithDict:responseObject];
//
自定义对象的存储必须用NSKeyedArchiver,不再有什么writeToFile方法
[NSKeyedArchiver
archiveRootObject:account toFile:path];
其实,关于归档和反归档的方法,MJExtension做了很好的处理,可以使用。 我们也可以将存储账号信息封装成一个工具类,看自己喜好。
相关文章推荐
- 自定义类型归档与反归档
- 资料推荐--Google Java编码规范
- python 操作FTP
- springMVC 学到新的知识点
- C#全角和半角转换
- VB二进制文件读写
- PHP——初学,基础
- 面向对象高级特性===Java静态内部类、匿名内部类、成员式内部类和局部内部类
- Python 爬虫 正则抽取网页数据和Scrapy简单使用
- 在C#中创建和读取XML文件
- python晦涩知识点(二)
- 4.python函数基础
- VB操作Excel
- 计算两个时间的差
- C语言的一些常见问题
- ASP.NET 5基础之中间件
- paper 15 :整理的CV代码合集
- java实现排序二叉树
- [Java视频笔记]day03
- Java简单算法——分解质因数