iOS存储数据字典(用户信息)到沙盒

https://blog.csdn.net/wtdask/article/details/51669729

iOS存储数据字典到沙盒

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

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

YYCAccount.h文件中代码 这里面字段根据返回的数据写,一般写能用的上的就行了,不需要的不用写
View Code
3 @interface YYCAccount : NSObject
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
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
GYSound *sound=[[self alloc]init];
// sound.ID=dict[@"ID"];
// sound.name=dict[@"name"];
// sound.value=dict[@"value"];
// sound.state=dict[@"state"];
// sound.maxValue=dict[@"maxValue"];
// sound.minValue=dict[@"minValue"];
// sound.defaultValue=dict[@"defaultValue"];
//
// sound.isUpdate=[dict[@"isUpdate"] integerValue];
//
// return sound;
71 @end

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

View Code
@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;
    }

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

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

YYCAccountTool工具类的.h文件代码

View Code

import

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

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

View Code

3 //账号信息存储路径
4 #define YYCAccountPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"account.archive"]

7 @implementation YYCAccountTool 8 /**
9 * 存储账号信息 10 * 11 * @param account 账号模型 12 /
13 +(void)saveAccount:(YYCAccount )account 14 { 15
16 //将一个对象写入沙盒 需要用到一个NSKeyedArchiver 自定义对象的存储必须用这个
17 [NSKeyedArchiver archiveRootObject:account toFile:YYCAccountPath]; 18 } 19
20 /
21 * 返回账号信息 22 * 23 * @return 账号模型(如果账号过期,我们会返回nil) 24 */
25 +(YYCAccount )account 26 { 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)deleteAccount 40 { 41 return [[NSFileManager defaultManager] removeItemAtPath:YYCAccountPath error:nil]; 42
43 } 44
45
46
47
48
49 @end

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

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

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

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

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

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

YYCAccount *account=[YYCAccount AccountStatusWithDict:data];

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

[YYCAccountTool saveAccount:account];

你可能感兴趣的:(iOS存储数据字典(用户信息)到沙盒)