iOS存储数据字典到沙盒
1.创建一个账号数据模型 用来存放从服务器返回的数据,一般返回的是一个字典,里面包含了这个登陆用户的各种信息,这个数据模型就是用来存放这些东西的
创建一个数据模型 YYCAccount 继承 NSObject 注意要遵守<NSCoding>协议
YYCAccount.h文件中代码 这里面字段根据返回的数据写,一般写能用的上的就行了,不需要的不用写
#import <Foundation/Foundation.h> @interface YYCAccount : NSObject <NSCoding>
/**
* 用户ID
*/
@property (nonatomic, assign) int uid;
/**
* 用户姓名
*/
@property (nonatomic, copy) NSString *name;
/**
* 手机号
*/
@property (nonatomic, copy) NSString *tel;
/**
* 出生日期
*/
@property (nonatomic, copy) NSString *birthday;
/**
* 性别
*/
@property (nonatomic, copy) NSString *sex;
/**
* 图片存放目录
*/
@property (nonatomic, copy) NSString *category;
/**
* 用户密码
*/
@property (nonatomic, copy) NSString *password;
/**
* 优惠券数量
*/
@property (nonatomic, assign) int counum;
/**
* 爱牙指数
*/
@property (nonatomic, assign) int level;
/**
* 图片名称
*/
@property (nonatomic, copy) NSString *filename; /**
* 积分
*/
@property (nonatomic, assign) int integral;
/**
* 签到总天数
*/
@property (nonatomic, assign) int alldays; /**
* 上次签到时间
*/
@property (nonatomic, copy) NSString *lastCheckinTime; /**
* 用来加载字典 账户信息
*
* @param dict <#dict description#>
*
* @return <#return value description#>
*/
+(instancetype)AccountStatusWithDict: (NSDictionary *)dict; @end
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
2.创建一个账号存储工具类 YYCAccountTool 继承 NSObject 导入数据模型YYCAccount的头文件
处理账号相关的所有操作的工具类 存储账号、取出账号、验证账号
YYCAccountTool工具类的.h文件代码
#import <Foundation/Foundation.h>
#import "YYCAccount.h"
@interface YYCAccountTool : NSObject
/**
* 存储账号信息
*
* @param account 账号模型
*/
+(void)saveAccount:(YYCAccount *)account; /**
* 返回账号信息
*
* @return 账号模型(如果账号过期,我们会返回nil)
*/
+(YYCAccount *)account; /**
* 删除账号信息
*
* @return <#return value description#>
*/
+(BOOL)deleteAccount; @end
YYCAccountTool工具类的.m文件代码 注意账号信息存储路径 写成了一个宏,最后面是文件的名字,自己随意,一般都这样写没关系
#import "YYCAccountTool.h" //账号信息存储路径
#define YYCAccountPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"account.archive"] @implementation YYCAccountTool
/**
* 存储账号信息
*
* @param account 账号模型
*/
+(void)saveAccount:(YYCAccount *)account
{ //将一个对象写入沙盒 需要用到一个NSKeyedArchiver 自定义对象的存储必须用这个
[NSKeyedArchiver archiveRootObject:account toFile:YYCAccountPath];
} /**
* 返回账号信息
*
* @return 账号模型(如果账号过期,我们会返回nil)
*/
+(YYCAccount *)account
{
//加载模型
YYCAccount *account=[NSKeyedUnarchiver unarchiveObjectWithFile:YYCAccountPath]; return account; } /**
* 删除账号信息
*
* @return <#return value description#>
*/
+(BOOL)deleteAccount
{
return [[NSFileManager defaultManager] removeItemAtPath:YYCAccountPath error:nil]; } @end
3.当我们的使用的使用的时候怎么使用呢?
存储数据 用一个字典接收服务器返回的数据 是一个字典
NSDictionary *data=dict[@"data"];
将返回的数据存进沙盒 这种方法必须是返回的data里的信息全都有值 为空的会崩,要判断一下
将返回的账户数据存进沙盒 应该将返回的字典数据转为模型 再存进沙盒
//转化为数据模型 直接调用数据模型里的加载字典的那个方法即可
YYCAccount *account=[YYCAccount AccountStatusWithDict:data];
//存储账号信息 直接导入账号工具类的头文件直接这样写即可:
[YYCAccountTool saveAccount:account];
获取账号信息
//获取用户信息账号模型
//YYCAccount *account=[YYCAccountTool account];
想要什么数据就直接account.就出来了
//删除所有账户信息 退出登录的时候执行的操作
[YYCAccountTool deleteAccount];
iOS存储数据字典到沙盒的更多相关文章
- iOS开发之获取沙盒路径
iOS开发之沙盒机制(SandBox)具体解说了沙盒的一些机制.在开发中,我们须要对沙盒进行操作.所以我们须要获取到沙盒路径. 沙盒里的目录包含Documents.Library.tmp.这三个目录的 ...
- IOS数据存储之文件沙盒存储
前言: 之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ...
- iOS开发之应用沙盒
1.应用沙盒概述 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒. 应用沙盒的文件系统目录,如下图所示(假设应用的名 ...
- iOS篇之有沙盒缓存
内存指的就是主板上的存储部件,是CPU直接与之沟通,并用其存储数据的部件,存放当前正在使用的(即执行中)的数据和程序,它的物理实质就是一组或多组具备数据输入输出和数据存储功能的集成电路,内存只用于暂时 ...
- iOS 文件操作:沙盒(SandBox)、文件操作(FileManager)、程序包(NSBundle)
版权声明:本文为博主原创文章,转载请声明出处:http://blog.csdn.net/jinnchang 1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系.每个 iOS 应用程 ...
- 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸
作者:蒸米 ----------------- 0x00 序 Ian Beer@google发布了CVE-2017-7047Triple_Fetch的exp和writeup[1],chenliang@ ...
- APNS IOS 消息推送沙盒模式和发布模式
在做.NET向IOS设备的App进行消息推送时候,采用的是PushSharp开源类库进行消息的推送,而在开发过程中,采用的是测试版本的app,使用的是测试的p12证书采用的是ApnsConfigura ...
- Swift iOS 文件操作:沙盒(SandBox)、程序包(NSBundle)
1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系.每个 iOS 应用程序都有一个单独的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒.所有的非代码文件 ...
- 【精】iOS 文件操作:沙盒(SandBox)、文件操作(FileManager)、程序包(NSBundle)
1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系. 每一个 iOS 应用程序都有一个单独的文件系统(存储空间).并且仅仅能在相应的文件系统中进行操作,此区域被称为沙盒. 全部的非 ...
随机推荐
- C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁
系列文章 C#开发奇技淫巧一:调试windows系统服务 C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁 程序目录的整理 ...
- 分布式理论之一:Paxos算法的通俗理解
维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...
- 模拟实现Spring中的注解装配
本文原创,地址为http://www.cnblogs.com/fengzheng/p/5037359.html 在Spring中,XML文件中的bean配置是实现Spring IOC的核心配置文件,在 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 将Json数据保存在静态脚本文件中读取
一些常用的数据例如一些网站的区域信息被改变的可能性不大,一般不通过请求获取,于是我们选择存在静态文件中,例如以下Demo: 1.动态加载Json数据显示到前台 [HttpPost] public Ac ...
- JavaScript权威设计--jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]
1.$和jquery在全局命名空间中定义的唯一两个变量. 2.jquery是工厂函数,不是构造函数.他返回一个新创建的对象. 3.jquery的四种调用方式: <1>传递C ...
- JavaScript权威设计--JavaScript对象(简要学习笔记八)
1.属性的特性 一个属性包含一个名字和4个特性.4个特性:值,可写性,可枚举性,可配置性 2.对象的三个属性 一:原型属性 要想检测一个对象是否是另一个对象的原型,使用isPrototypeOf( ...
- 【补充】Gitlab 部署 CI 持续集成
上一篇:<劈荆斩棘:Gitlab 部署 CI 持续集成> 上一篇所配置的.gitlab-ci.yml: stages: - build - test before_script: - ec ...
- Vertica删除历史分区数据
假设test用户下创建的t_jingyu表 vsql -Utest -wtestpwd create table t_jingyu( col1 int, col2 varchar, col3 time ...
- 【干货】”首个“ .NET Core 验证码组件
前言 众所周知,Dotnet Core目前没有图形API,以前的System.Drawing程序集并没有包含在Dotnet Core 1.0环境中.不过在dotnet core labs项目里可以见到 ...