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 *)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
View Code
3.当我们的使用的使用的时候怎么使用呢?
存储数据 用一个字典接收服务器返回的数据 是一个字典
NSDictionary *data=dict[@"data"];
将返回的数据存进沙盒 这种方法必须是返回的data里的信息全都有值 为空的会崩,要判断一下
将返回的账户数据存进沙盒 应该将返回的字典数据转为模型 再存进沙盒
//转化为数据模型 直接调用数据模型里的加载字典的那个方法即可
YYCAccount *account=[YYCAccount AccountStatusWithDict:data];
//存储账号信息 直接导入账号工具类的头文件直接这样写即可:
[YYCAccountTool saveAccount:account];
获取账号信息
//获取用户信息账号模型
//YYCAccount *account=[YYCAccountTool account];
想要什么数据就直接account.就出来了
//删除所有账户信息 退出登录的时候执行的操作
[YYCAccountTool deleteAccount];