NSUserDefaults 归档,数据持久化

我这里的方法适用于 model 归档,用户登录数据持久化


1,创建一个model ,要遵守协议 NSCoding 

我创建 UserInfo 

UserInfo.h 文件:

#import <Foundation/Foundation.h>


@interface UserInfo : NSObject<NSCoding>

@property (nonatomic, strong)NSString *userName;

@property (nonatomic, strong)NSString *userToken;


@end


UserInfo.m 文件:

- (void)encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:self.userName forKey:@"userName"];

    [aCoder encodeObject:self.userToken forKey:@"userToken"];

}


- (id)initWithCoder:(NSCoder *)aDecoder{

    self = [super init];

    if (self) {

        self.userName = [aDecoder decodeObjectForKey:@"userName"];

        self.userToken = [aDecoder decodeObjectForKey:@"userToken"];

    }

    return self;

}



2,在需要归档的地方 写归档的方法

//归档

- (void)encode{

    BOOL save = YES;

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    [userDefaults setBool:save forKey:@"save"];

    [userDefaults synchronize];

    

    [NSKeyedArchiver archiveRootObject:_userList toFile:_path];

    

}


3,在需要解归档的地方写上解归档的方法:

//解归档

- (void)decode{

    _userList = [[NSKeyedUnarchiver unarchiveObjectWithFile:_path ]mutableCopy];

    NSLog(@"---解归档---%@", _userList);

    for (UserInfo *user in _userList) {

        NSLog(@"jieguidang  %@", user.userToken);

    }

}


4,在用户进入登录页面的时候  需要先解归档,看看用户是不是有登录过

- (void)loadData{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    _path = [[paths firstObject]stringByAppendingPathComponent:@"userInfo.archiver"];

    BOOL save = NO;

    NSLog(@"地址 :%@", _path);

    NSUserDefaults *uerd = [NSUserDefaults standardUserDefaults];

    if ([uerd boolForKey:@"save"]!= YES) {

        _userList = [NSMutableArray array];

        

    }else{

        save = YES;

        [uerd setBool:save forKey:@"save"];

        [uerd synchronize];

        [self decode];

    }

}



5,用户登录成功后,把用户登录成功后的一些必要数据持久化,在用户再次进入 APP 的时候不用再重新登录:

 UserInfo *userInfo = [[UserInfo alloc]init];

            userInfo.userName = _telephoneNumb;

            userInfo.userToken = news[@"data"][@"token"];

            [_userList addObject:userInfo];

            [self encode];



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值