zoukankan      html  css  js  c++  java
  • 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 *)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];

  • 相关阅读:
    ip地址查询python3小工具_V0.0.1
    安恒 堡垒机 明御®运维审计与风险控制系统 部署中遇到的问题
    zping ping包工具20180605.exe测试版
    zping ping包工具20180524.exe测试版
    XSS练习平台-XSS Challenges
    温暖而又美妙的语言
    无法连接仓库:Error performing git command: /usr/local/src/git-2.9.5 ls-remote -h https://gitee.com/skynetInfo/auto-webui HEAD
    jenkins安装方式及启动配置
    Can't open file '/opt/svn/path/db/txn-current-lock': Permission denied
    centos部署maven私服
  • 原文地址:https://www.cnblogs.com/ithongjie/p/5320489.html
Copyright © 2011-2022 走看看