利用NSKeyedUnarchiver把数据存储到本地

在开发中,如果使用plist存贮到本地的话,存贮的类型有限,这时候,我们可以就可以考虑利用NSKeyedUnarchiver把数据存储到本地,通过这个方法我们可以将model存贮到本地,一般用来保存用户的账号信息之类的

第一步,我们建一个model,

#import <Foundation/Foundation.h>

@interface Account : NSObject

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

@property (nonatomic, copy) NSString *uid; //用户id

@property (nonatomic, copy) NSString *nickname;

@property (nonatomic, copy) NSString *password;

@property (nonatomic, copy) NSString *tel; //座机

@property (nonatomic, copy) NSString *last_login;

//@property (nonatomic, copy) NSString *new_phone;

@property (nonatomic, copy) NSString *uthumb; //头像地址

@property (nonatomic, copy) NSString *province;

@property (nonatomic, copy) NSString *city;

@property (nonatomic, copy) NSString *area;

@property (nonatomic, copy) NSData *photoData;

@end

#import "Account.h"

@implementation Account

+ (NSDictionary *)replacedKeyFromPropertyName

{

    return @{@"uid": @"id"};

}

@end

//定义一个 .h 头文件,用来简写我们的单例

// .h

#define single_interface(class)  + (class *)shared##class;

// \ 代表下一行也属于宏

// ## 是分隔符

#define single_implementation(class) \

static class *_instance; \

\

+ (class *)shared##class \

{ \

if (_instance == nil) { \

_instance = [[self alloc] init]; \

} \

return _instance; \

} \

\

+ (id)allocWithZone:(NSZone *)zone \

{ \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instance = [super allocWithZone:zone]; \

}); \

return _instance; \

}

第二步:封装一个方法,使用NSKeyedUnarchiver保存到本地

//  AccountTool.h

//

#import <Foundation/Foundation.h>

#import "Account.h"

#import "SingleTon.h"

@interface AccountTool : NSObject

single_interface(AccountTool)

- (void)saveAccount:(Account *)account;

- (void)removeAccount;

// 获得当前账号

@property (nonatomic, readonly) Account *account;

@end

//

//  AccountTool.m

//

#import "AccountTool.h"

// 文件路径---->>获取分类的沙盒文件路径

#define kFile [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"account.data"]

@implementation AccountTool

single_implementation(AccountTool)

- (instancetype)init

{

    if (self = [super init]) {

        //解归档该路径下的文件

        _account = [NSKeyedUnarchiver unarchiveObjectWithFile:kFile];

    }

    return self;

}

- (void)saveAccount:(Account *)account

{

    _account = account;

    //将数据归档,如果前面的文件不存在,就会在归档数据时创建

    [NSKeyedArchiver archiveRootObject:account toFile:kFile];

}

- (void)removeAccount

{

    if ([[NSFileManager defaultManager] fileExistsAtPath:kFile]) {

        [[NSFileManager defaultManager]removeItemAtPath:kFile error:nil];

    }

}

@end

//这样我们就可以使用这个工具类了(下面以保存登录后的账号为例说明如何使用)

判断是否有数据

 if ([AccountTool sharedAccountTool].account.uid == nil || ! kUserLogin || [[AccountTool sharedAccountTool].account.uid isKindOfClass:[NSNull class]]){

     //无数据

}else {

     //有数据

}

//登录成功后将数据用mj工具类将字典直接保存到model中,然后直接保存到本地

 Account *currentAccount = [Account mj_objectWithKeyValues:userInfo];

    [[AccountTool sharedAccountTool] saveAccount:currentAccount];

//

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超详细的Python字典讲解

一、概念 1.定义 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。是可变数据类型 字典类型的创建 1.字典的每个键值key>value对用冒号:分隔&#xff0c;每个键值对之间用逗号,分割&#xff0c;整个字典包括在花括号{}中 d {key1:value1,key:value} 2.使…

Redis的发布订阅机制及其使用场景

Redis的发布订阅&#xff08;Pub/Sub&#xff09;机制是一种消息通信模式&#xff0c;其中发送者&#xff08;发布者&#xff09;将消息发送到特定的频道&#xff0c;而订阅者则订阅其中一个或多个频道&#xff0c;以接收感兴趣的消息。这种模式可以用于构建实时通信系统、消息…

【Rust】——函数(所有权)以及借用或引用

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

Postman相关问题及答案(2024)

1、Postman 是什么&#xff1f;它的用途是什么&#xff1f; Postman 是一个流行的 API (应用程序编程接口) 开发辅助工具&#xff0c;它帮助开发者设计、测试、文档化和监控 APIs。Postman 提供了一个友好的用户界面&#xff0c;使得发送网络请求、检查响应和其他与 API 交互的…

RK3568开发笔记-sdmmc3.0 error -110 whilst initialising SD card问题解决

目录 前言 一、SD介绍 二、原理图连接 三、设备树配置 四、SD卡调试

不是詹姆斯了?皮蓬改口称乔丹是他的GOAT

NBA直播吧-nba直播在线观看免费高清直播录像回放NBA直播吧是一个专业NBA直播在线观看免费直播平台&#xff0c;专业提供nba直播免费高清在线观看中文jrs无插件直播&#xff0c;NBA录像回放&#xff0c;CBA直播&#xff0c;WNBA以及篮球直播&#xff0c;足球直播五大联赛等最新直…

同步与异步:程序执行方式的不同之处

在软件开发中&#xff0c;同步和异步是两个重要的概念&#xff0c;用于描述程序的执行方式。它们的区别在于程序在处理任务时是否需要等待或阻塞。下面我们来详细了解一下它们的区别和应用场景。 同步&#xff08;Synchronous&#xff09; 同步操作是指程序按照顺序执行&…

CNN中的伯努利分布与二项式分布

文章目录 一、伯努利分布是什么&#xff1f;1、伯努利分布的应用2、伯努利分布在CNN中的应用3、举个栗子4、伯努利分布可以用于多个类别的分类么5、伯努利分布与多项式分布的区别与联系 二、多项式分布是什么&#xff1f;1、多项式分布在CNN中的应用2、举个栗子 三、损失函数是…

蓝桥杯-常用STL(三)

常用STL &#x1f388;1.映射&#x1f388;2.map的基础使用&#x1f52d;2.1引入库&#x1f52d;2.2构造一个映射&#x1f52d;2.3插入一对映射&#x1f52d;2.4判断关键字是否存在&#x1f52d;2.5遍历映射&#x1f52d;2.6清空 &#x1f388;1.映射 &#x1f50e;映射是指两个…

Pycharm环境中,python为变量赋值的时候,如何自动添加空格?

在python中&#xff0c;为变量赋值的时候&#xff0c;如果没有加入空格&#xff0c;代码底部会有灰色波浪线&#xff0c;说明不符合Python规范。 可以在菜单栏选择code&#xff0c;reformat code。重新格式化代码&#xff0c;所有代码会自动格式化。 快捷方式为&#xff1a;ct…

Marble Race in Algodoo

Marble 的形式 ENCNMarble Race小球竞赛 / 球球比赛Marble Elimination小球淘汰赛Survival Proliferation生存繁殖赛Territory War领土战争Castle Destruction城堡破坏 / 城堡毁灭Sea Battle / Ship Battle海战 / 战船较量Escape from ( )跑路比赛 / 从( )逃离 Thyme 中的符号…

数据库JSON类型到映射JAVA上

Mysql存放JSON数据如何映射JAVA实体类 概述&#xff1a;最近写在写SKU模块中&#xff0c;需要表中字段存放JSON类型数据&#xff0c;mybatis-plus在查询的时候如何跟JSON类型所匹配呢&#xff1f;再次记录一下。 直接上代码&#xff0c;后面有解释到底如何映射上的。 Mysql表…

UV-K5

该方法是安装到python的安装目录了&#xff0c;建立项目的时候勾选 Inherit globel site-packages (使用全局的站点包) &#xff0c;就能调用安装路径的包文件环境。 cmd进入Dos窗口安装 pyserial 模块&#xff1a; pip install pyserial

阿里巴巴中国站获得公司档案信息 API 返回值说明

一、应用场景 阿里巴巴中国站获得公司档案信息 API接口的应用场景可以包括但不限于以下几种情况&#xff1a; 1、企业信息查询&#xff1a;API接口可用于查询企业的基本档案信息&#xff0c;如企业名称、注册地址、法定代表人、经营范围等。这些信息对于了解企业背景、信用状…

学习枚举

枚举 引入 编写季节类&#xff08;Season&#xff09;&#xff0c;该类只有四个对象&#xff08;spring&#xff0c;summer&#xff0c;autumn&#xff0c;winter&#xff09; 概念 枚举&#xff08;enum&#xff09;全称为 enumeration&#xff0c; 是 JDK 1.5 中引入的新特性…

Find Yourself

前言 2月份&#xff0c;真是发生了很多事情啊。 离职&#xff0c;放假&#xff0c;瞒着家人&#xff0c;过春节&#xff0c;陪女儿玩游戏&#xff0c;找工作&#xff0c;选择Offer。 也和别人一起解决了一个设备不稳定的重大问题。 每一项展开讲讲都能写一篇文章。 如果你感…

手机和windows的便签怎么共享账号使用

在忙碌的生活中&#xff0c;我经常需要在手机和电脑之间同步记事信息。可是&#xff0c;每次当我在手机上记下一些重要事项后&#xff0c;想要在电脑上查看或继续编辑时&#xff0c;总是遇到各种麻烦。因为手机和电脑上的便签软件各不相同&#xff0c;无法实现账号共享和内容同…

从0到1实现五子棋游戏!!

Hello&#xff0c;好久不见宝子们&#xff0c;今天来给大家更一个五子棋的程序~ 我们今天要讲的内容如下&#xff1a; 文章目录 1.五子棋游戏介绍1.1 游戏玩法介绍&#xff1a; 2.准备工作2.1 具体操作流程 3.游戏程序主函数4.初始化棋盘4.1.定义宏变量4.2 初始化棋盘 5.打印…

2024年2月最新微信域名检测拦截接口源码

这段PHP代码用于检测指定域名列表中的域名是否被封。代码首先定义了一个包含待检测域名的数组 $domainList&#xff0c;然后遍历该数组&#xff0c;对每个域名发送HTTP请求并检查响应内容以判断域名是否被封。 具体步骤如下&#xff1a; 1. 定义待检测的域名列表。 2. 遍历域名…

一、深度学习介绍

目录 1、深度学习与机器学习的区别 1.1 特征提取方面 1.2 数据量和计算性能要求 1.3 算法代表 2、深度学习应用场景 1、深度学习与机器学习的区别 1.1 特征提取方面 1.2 数据量和计算性能要求 1.3 算法代表 2、深度学习应用场景