你的位置:首页 > 操作系统

[操作系统]iOS存储数据字典到沙盒


1.创建一个账号数据模型 用来存放从服务器返回的数据,一般返回的是一个字典,里面包含了这个登陆用户的各种信息,这个数据模型就是用来存放这些东西的

创建一个数据模型  YYCAccount 继承 NSObject   注意要遵守<NSCoding>协议

YYCAccount.h文件中代码 这里面字段根据返回的数据写,一般写能用的上的就行了,不需要的不用写

 1 #import <Foundation/Foundation.h> 2  3 @interface YYCAccount : NSObject <NSCoding> 4 /** 5  * 用户ID 6 */ 7 @property (nonatomic, assign) int uid; 8 /** 9  * 用户姓名10 */11 @property (nonatomic, copy) NSString *name;12 /**13  * 手机号14 */15 @property (nonatomic, copy) NSString *tel;16 /**17  * 出生日期18 */19 @property (nonatomic, copy) NSString *birthday;20 /**21  * 性别22 */23 @property (nonatomic, copy) NSString *sex;24 /**25  * 图片存放目录26 */27 @property (nonatomic, copy) NSString *category;28 /**29  * 用户密码30 */31 @property (nonatomic, copy) NSString *password;32 /**33  * 优惠券数量34 */35 @property (nonatomic, assign) int counum;36 /**37  * 爱牙指数38 */39 @property (nonatomic, assign) int level;40 /**41  * 图片名称42 */43 @property (nonatomic, copy) NSString *filename;44 45 /**46  * 积分47 */48 @property (nonatomic, assign) int integral;49 /**50  * 签到总天数51 */52 @property (nonatomic, assign) int alldays;53 54 /**55  * 上次签到时间56 */57 @property (nonatomic, copy) NSString *lastCheckinTime;58 59 60 /**61  * 用来加载字典 账户信息62  *63  * @param dict <#dict description#>64  *65  * @return <#return value description#>66 */67 +(instancetype)AccountStatusWithDict: (NSDictionary *)dict;68 69 70 71 @end

View Code

YYCAccount.m文件中代码 主要是归档 和反归档两个方法,注意存储类型要和数据类型一致  还有一个加载字典账户信息的方法要实现

#import "YYCAccount.h"@implementation YYCAccount+(instancetype)AccountStatusWithDict:(NSDictionary *)dict{  YYCAccount *account=[[self alloc]init];  account.uid=[dict[@"uid"] intValue];  account.name=dict[@"name"];  account.tel=dict[@"tel"];  account.birthday=dict[@"birthday"];  account.filename=dict[@"filename"];  account.counum=[dict[@"counum"] intValue];  account.level=[dict[@"level"] intValue];  account.integral=[dict[@"integral"] intValue];  account.alldays=[dict[@"alldays"] intValue];  account.lastCheckinTime=dict[@"lastCheckinTime"];    return account;}/** * 当一个对象要归档进沙盒的时候就会调用 归档 * 目的,在这个方法中说明这个对象的哪些属性写进沙盒 * @param encoder <#encoder description#> */-(void)encodeWithCoder:(NSCoder *)encoder{  [encoder encodeInt:self.uid forKey:@"uid"];  [encoder encodeObject:self.name forKey:@"name"];  [encoder encodeObject:self.tel forKey:@"tel"];  [encoder encodeObject:self.birthday forKey:@"birthday"];  [encoder encodeInteger:self.counum forKey:@"counum"];  [encoder encodeInteger:self.level forKey:@"level"];  [encoder encodeInteger:self.integral forKey:@"integral"];  [encoder encodeInteger:self.alldays forKey:@"alldays"];  [encoder encodeObject:self.lastCheckinTime forKey:@"lastCheckinTime"];  [encoder encodeObject:self.filename forKey:@"filename"];//}/** * 反归档 的时候会调用这个方法 解档 * 目的:在这个方法中说明这个对象的哪些属性从沙河中解析出来 从沙河中解析对象 反归档会调用这个方法 需要解析哪些属性 * @param decoder <#decoder description#> * * @return <#return value description#> */-(instancetype)initWithCoder:(NSCoder *)decoder{  if (self=[super init]) {    self.uid=[decoder decodeIntForKey:@"uid"];    self.name=[decoder decodeObjectForKey:@"name"];    self.tel=[decoder decodeObjectForKey:@"tel"];    self.birthday=[decoder decodeObjectForKey:@"birthday"];    self.counum=[decoder decodeIntForKey:@"counum"];    self.level=[decoder decodeIntForKey:@"level"];    self.integral=[decoder decodeIntForKey:@"integral"];    self.alldays=[decoder decodeIntForKey:@"alldays"];    self.lastCheckinTime=[decoder decodeObjectForKey:@"lastCheckinTime"];    self.filename=[decoder decodeObjectForKey:@"filename"];      }  return self;}@end

View Code

2.创建一个账号存储工具类  YYCAccountTool 继承 NSObject   导入数据模型YYCAccount的头文件

处理账号相关的所有操作的工具类 存储账号、取出账号、验证账号

YYCAccountTool工具类的.h文件代码

 1 #import <Foundation/Foundation.h> 2 #import "YYCAccount.h" 3 @interface YYCAccountTool : NSObject 4 /** 5  * 存储账号信息 6  * 7  * @param account 账号模型 8 */ 9 +(void)saveAccount:(YYCAccount *)account;10 11 /**12  * 返回账号信息13  *14  * @return 账号模型(如果账号过期,我们会返回nil)15 */16 +(YYCAccount *)account;17 18 /**19  * 删除账号信息20  *21  * @return <#return value description#>22 */23 +(BOOL)deleteAccount;24 25 26 27 @end

View Code

YYCAccountTool工具类的.m文件代码   注意账号信息存储路径 写成了一个宏,最后面是文件的名字,自己随意,一般都这样写没关系

 1 #import "YYCAccountTool.h" 2  3 //账号信息存储路径 4 #define YYCAccountPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"account.archive"] 5  6  7 @implementation YYCAccountTool 8 /** 9  * 存储账号信息10  *11  * @param account 账号模型12 */13 +(void)saveAccount:(YYCAccount *)account14 {15   16   //将一个对象写入沙盒 需要用到一个NSKeyedArchiver 自定义对象的存储必须用这个17   [NSKeyedArchiver archiveRootObject:account toFile:YYCAccountPath];18 }19 20 /**21  * 返回账号信息22  *23  * @return 账号模型(如果账号过期,我们会返回nil)24 */25 +(YYCAccount *)account26 {27   //加载模型28   YYCAccount *account=[NSKeyedUnarchiver unarchiveObjectWithFile:YYCAccountPath];29   30   return account;31   32 }33 34 /**35  * 删除账号信息36  *37  * @return <#return value description#>38 */39 +(BOOL)deleteAccount40 {41   return [[NSFileManager defaultManager] removeItemAtPath:YYCAccountPath error:nil];42   43 }44 45 46 47 48 49 @end

View Code

 

3.当我们的使用的使用的时候怎么使用呢?

存储数据  用一个字典接收服务器返回的数据 是一个字典

 NSDictionary *data=dict[@"data"];

 将返回的数据存进沙盒  这种方法必须是返回的data里的信息全都有值 为空的会崩,要判断一下

  将返回的账户数据存进沙盒  应该将返回的字典数据转为模型 再存进沙盒

//转化为数据模型  直接调用数据模型里的加载字典的那个方法即可

 YYCAccount *account=[YYCAccount AccountStatusWithDict:data];

//存储账号信息  直接导入账号工具类的头文件直接这样写即可:

 [YYCAccountTool saveAccount:account];

 

获取账号信息  

//获取用户信息账号模型

//YYCAccount *account=[YYCAccountTool account];

 想要什么数据就直接account.就出来了

 

//删除所有账户信息  退出登录的时候执行的操作

 [YYCAccountTool deleteAccount];