iOS-归档模型创建和工具类的封装

88 篇文章 0 订阅

数据的存储方式有好多种 plist NSUserDefault CoreData fmdb 归档   

这些方式各自有优缺点 

如果我们存储数据量小的数据 可以使用归档和 NSUserDefault  

今天讲解一个知识点  归档的使用   

这里是为实现了一个功能 用户登录和注册   

我们将信息保存起来 下次打开应用程序 直接从沙盒中读取比对判断 十分方便 

这里封装了一个用户模型 和 一个工具类  大家可以拿来直接使用  

代码如下:注解很详细 

#import <Foundation/Foundation.h>

#warning 这里必须遵守协议 不然不知道对象中的哪些属性写进沙盒
@interface QHAccount : NSObject<NSCoding>

//返回字段  字段类型 字段说明

/**string 登录状态 返回值1 表示登录成功 返回值0表示登录失败*/
@property (nonatomic, copy) NSString *status;

/**string 记录登录状态信息:登录成功/登录失败*/
@property (nonatomic, copy) NSString *data;

/**string userid 用户的id 编号唯一*/
@property (nonatomic, copy) NSString *userid;

/**string mobile电话号码*/
@property(nonatomic, copy)NSString *mobile;

/**string nickname昵称 用于保存用户的昵称*/
@property (nonatomic, copy) NSString *nickname;

/**string 登录成功后返回token值*/
@property (nonatomic, copy)NSString *
token;

+ (instancetype)accountWithDict:(NSDictionary *)dict;


@end

#import "QHAccount.h"

@implementation QHAccount

+ (instancetype)accountWithDict:(NSDictionary *)dict
{
    QHAccount *account = [[self alloc]init];
    
    account.status = dict[@"status"];
    account.data = dict[@"data"];
    account.userid = dict[@"userid"];
    account.mobile = dict[@"mobile"];
    account.nickname = dict[@"nickname"];
    account.token = dict[@"token"];
    
    return account;
}

/**
 *  当一个对象要归档到沙盒中的时候 就会调用这个方法
 目的:在这个方法中说明这个对象的哪些属性要存进沙盒

 */

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.status forKey:@"status"];
    [aCoder encodeObject:self.data forKey:@"data"];
    [aCoder encodeObject:self.userid forKey:@"userid"];
    [aCoder encodeObject:self.mobile forKey:@"mobile"];
    [aCoder encodeObject:self.nickname forKey:@"nickname"];
    [aCoder encodeObject:self.token forKey:@"token"];
}

/**
 *  当从沙盒中解档一个对象(从沙盒中加载一个对象)就要调用该方法
 目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)
 */

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init]) {
        self.status = [aDecoder decodeObjectForKey:@"status"];
        self.data = [aDecoder decodeObjectForKey:@"data"];
        self.userid = [aDecoder decodeObjectForKey:@"userid"];
        self.mobile = [aDecoder decodeObjectForKey:@"mobile"];
        self.nickname = [aDecoder decodeObjectForKey:@"nickname"];
        self.token = [aDecoder decodeObjectForKey:@"token"];
    }
    return self;
}
@end

#import <Foundation/Foundation.h>
#import "QHAccount.h"

@interface QHAccountTool : NSObject

/**
 *  存储用户的账号信息
 *
 *  @param account <#account description#>
 */
+ (void)saveAccount:(QHAccount *)account;

/**
 *  返回账号信息
 *
 *  @return <#return value description#>
 */
+ (QHAccount *)account;

@end

//处理账号所有的有关信息 存储账号 验证账号


#define QHAccountPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"account.archive"]


#import "QHAccountTool.h"


@implementation QHAccountTool



/**

 *  存储用户的账号信息

 *

 *  @param account <#account description#>

 */

+ (void)saveAccount:(QHAccount *)account

{

    //放进document 可以进行备份

    //将返回的数据存进沙盒

    //    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

    

#warning 这里的NSString 方法调用出错用的是stringByAppending 路径拼接错误

    //    NSString *path = [doc stringByAppendingPathComponent:@"account.archive"];

    //存进沙盒

    //[responseObject writeToFile:path atomically:YES];

    

    //自定义对象的存储必须用NSKeyedArchiver 不在有什么write to file

    

    [NSKeyedArchiver archiveRootObject:account toFile:QHAccountPath];

}


/**

 *  返回账号信息

 *

 *  @return <#return value description#>

 */

+ (QHAccount *)account

{

    //加载数据模型

    QHAccount *account = [NSKeyedUnarchiver unarchiveObjectWithFile:QHAccountPath];

    return account;

}

@end



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值