利用runtime保存数据到本地文件,和保存到NS两种UserDefaults中的两种方法

1.保存到本地的文件,放在pch文件中的

#define USERFILE [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"hxj"]

.h文件

//
//  DTXUserInfoManager.h
//  dtx
//
//  Created by a on 2018/4/25.
//  Copyright © 2018年 hnhf. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface DTXUserInfoManager : NSObject<NSCoding>
+(instancetype)shareCurrentManager;
//保存字典数据到本地
-(void)saveUserInfoWithDict:(NSDictionary *)dict;
//得到手机号
-(NSString*)getPhone;
//得到手机号运营商-认证状态 -1为未认证 1为认证通过 2为失败 3为认证中
-(NSString*)getuserState;
//用户银行卡管理表-是否默认
-(NSString*)getbankCardState;

/**
 用户信息认证表-认证状态

 @return return value description
 */
-(NSString*)getcertificationState;
//实名工作认证表-状态
-(NSString*)getrealWorkState;

/**
 支付分认证状态
 */
-(NSString *)getzmScoreState;
//用户联系表-状态
-(NSString*)getrealRelativeState;
//当前用户总额度
-(NSString*)getallPrice;
// 认证身份证号
-(NSString*)getckCardNum;
//认证真实姓名
-(NSString *)getckName;
//当前用户剩余额度
-(NSString*)getrmPrice;
//用户当前信息 ID 姓名 状态
-(NSString *)gettoken;
//获取交易密码的状态
-(NSString *)getpasswordState;

/**
 判断需要不要跳转贷超界面

 @return 1为不需要跳 -1需要跳转贷超界面
 */
-(NSString *)getthreeAuthState;

/**
 单据状态为1,2,8的数量

 @return 返回0或者1
 */
-(NSString *)gethaveInHandLoanNum;

/**
 订单状态 

 @return 1:未审核 2:已放款 3:审核中
 */
-(NSString *)getbillSate;
/**
 淘宝的状态

 @return 返回淘宝认证的状态值
 */
-(NSString *)getTBState;
//清除本地数据
-(void)clearDomainData;





/**
 账户总额度(double)
 */
@property (nonatomic,strong)NSNumber *  allPrice;

/**
 用户银行卡管理表-是否默认 -1为没有设置银行卡 1为设置银行卡
 */
@property (nonatomic,copy)NSString * bankCardState;

/**
 订单状态 1:未审核 2:已放款 3:审核中
 */
@property (nonatomic,strong)NSNumber * billSate;

/**
 黑名单状态
 */
@property (nonatomic,copy)NSString * blackLState;

/**
 身份认证状态-1为未认证 2为认证失败 3为认证中 1为认证成功
 */
@property (nonatomic,copy)NSString * certificationState;

/**
 身份证号码
 */
@property (nonatomic,copy)NSString * ckCardNum;

/**
 认证真实姓名
 */
@property (nonatomic,copy)NSString * ckName;

/**
 客户性质:1:新客2:次新3:老客
 */
@property (nonatomic,strong)NSNumber * customer;

/**
 单据的数量 返回0 或者1
 */
@property (nonatomic,strong)NSNumber * haveInHandLoanNum;

/**
 密码状态 -1为未设置 1为已设置
 */
@property (nonatomic,copy)NSString * passwordState;

/**
 手机号
 */
@property (nonatomic,copy)NSString * phone;

/**
 紧急联系人
 */
@property (nonatomic,copy)NSString * realRelativeState;

/**
 工作状态
 */
@property (nonatomic,copy)NSString * realWorkState;

/**
 余额
 */
@property (nonatomic,copy)NSString * rmPrice;

/**
 淘宝状态
 */
@property (nonatomic,copy)NSString * tbState;

/**
 -1为贷超 1不是贷超
 */
@property (nonatomic,copy)NSString * threeAuthState;

/**
 用户的token
 */
@property (nonatomic,copy)NSString * token;

/**
 运营商 -1为未认证 1为认证
 */
@property (nonatomic,copy)NSString * userState;

/**
 芝麻分
 */
@property (nonatomic,copy)NSString * zmScoreState;

//更新用户信息
+(void)updateCurrentUser;
//获取用户信息
+(instancetype)getCurrentUser;
+(BOOL)logout;
@end

.m文件

//
//  DTXUserInfoManager.m
//  dtx
//
//  Created by a on 2018/4/25.
//  Copyright © 2018年 hnhf. All rights reserved.
//

#import "DTXUserInfoManager.h"
#import <objc/runtime.h>

static DTXUserInfoManager * _user = nil;

@implementation DTXUserInfoManager
+(instancetype)shareCurrentManager{
    static DTXUserInfoManager *userManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        userManager = [[DTXUserInfoManager alloc]init];
    });
    return userManager;
}
-(void)saveUserInfoWithDict:(NSDictionary *)dict{
    NSArray *keyArr = [dict allKeys];
    for (NSString *keyString in keyArr) {
        if ([dict[keyString] isKindOfClass:[NSString class]]) {
            [[NSUserDefaults standardUserDefaults]setObject:dict[keyString] forKey:keyString];
        }else{
//            [[NSUserDefaults standardUserDefaults]setInteger:dict[keyString] forKey:keyString];
            [[NSUserDefaults standardUserDefaults] setObject:dict[keyString] forKey:keyString];
        }
    }
    [[NSUserDefaults standardUserDefaults]synchronize];
}
-(NSString* )getPhone{
    
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"phone"];
    
}
-(NSString*)getuserState{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"userState"];
}
-(NSString*)getbankCardState{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"bankCardState"];
}
-(NSString*)getcertificationState{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"certificationState"];
}
-(NSString*)getrealWorkState{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"realWorkState"];
}
-(NSString*)getrealRelativeState{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"realRelativeState"];
}
-(NSString*)getallPrice{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"allPrice"];
}
-(NSString*)getckCardNum{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"ckCardNum"];
}
-(NSString*)getckName{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"ckName"];
}
-(NSString*)getrmPrice{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"rmPrice"];
}
-(NSString*)gettoken{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"token"];
}
-(NSString *)getpasswordState{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"passwordState"];
}
/**
 判断需要不要跳转贷超界面
 
 @return 1为不需要跳 -1需要跳转贷超界面
 */
-(NSString *)getthreeAuthState{
     return [[NSUserDefaults standardUserDefaults]objectForKey:@"threeAuthState"];
}
/**
 支付分认证状态
 
 */
-(NSString *)getzmScoreState{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"zmScoreState"];

}
/**
 淘宝的状态
 
 @return 返回淘宝认证的状态值
 */
-(NSString *)getTBState{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"tbState"];
}
/**
 单据状态为1,2,8的数量
 
 @return 返回0或者1
 */
-(NSString *)gethaveInHandLoanNum{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"haveInHandLoanNum"];
}
/**
 订单状态 
 
 @return 1:未审核 2:已放款 3:审核中
 */
-(NSString *)getbillSate{
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"billSate"];
}
-(void)clearDomainData{
    NSString *bundleString =  [[NSBundle mainBundle] bundleIdentifier];
    [[NSUserDefaults standardUserDefaults]removePersistentDomainForName:bundleString];
    [[NSUserDefaults standardUserDefaults]synchronize];
}



-(void)encodeWithCoder:(NSCoder *)aCoder{
    unsigned int count = 0;
    Ivar * ivars =   class_copyIvarList([self class], &count);
    for (int i = 0; i<count; i++) {
        Ivar ivar = ivars[i];
        const char * name = ivar_getName(ivar);
        NSString * key = [NSString stringWithUTF8String:name];
        id value =  [self valueForKey:key];

        [aCoder encodeObject:value forKey:key];
    }
    free(ivars);
}
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super init]) {
        unsigned int count = 0;
        Ivar * ivars =    class_copyIvarList([self class], &count);
        for (int i = 0; i<count; i++) {
            Ivar ivar = ivars[i];
            const char * name = ivar_getName(ivar);
            NSString * key = [NSString stringWithUTF8String:name];
            id value = [aDecoder decodeObjectForKey:key];
            [self setValue:value forKey:key];
        }
        free(ivars);
    }
    return self;
}

+(void)updateCurrentUser{
    [NSKeyedArchiver archiveRootObject:_user toFile:USERFILE];
}
+(instancetype)getCurrentUser{
    if (_user == nil) {
        if ([[NSFileManager defaultManager]fileExistsAtPath:USERFILE]) {
            _user = [NSKeyedUnarchiver unarchiveObjectWithFile:USERFILE];
        }
        if (_user == nil) {
            _user = [[DTXUserInfoManager alloc]init];
            
        }
    }
    return _user;
}
+(BOOL)logout{
    NSFileManager * fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:USERFILE]) {
        return  [fileManager removeItemAtPath:USERFILE error:nil];
    }
    return NO;
}
@end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,501评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,673评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,610评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,939评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,668评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,004评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,001评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,173评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,705评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,426评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,656评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,139评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,833评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,247评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,580评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,371评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,621评论 2 380

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,173评论 1 19
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,718评论 0 3
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,458评论 9 467
  • 当你厌恶你身边的人, 你表达厌恶最好的方式不是和他们争吵, 而是自己勤快点儿,加把劲离开他们。 那样,他们就永远从...
    樱希绘阅读 772评论 2 6
  • 你一定要有成长的意愿。成长和发生在你身上的事情不同:你创造它,你活出它 ——杨澜 1、不敷衍、不马虎,认真对待孩...
    silvergin阅读 286评论 0 0