iOS数据存储到本地的几种方法
A,归档解档(多针对于模型或者数组,利用MJExtension)
1,先在model里的.m文件写上MJCodingImplementation
2,再进行模型归档:
#define APP_DOCUMENT [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
#define DocumentPath(path) [APP_DOCUMENT stringByAppendingPathComponent:path]
[NSKeyedArchiver archiveRootObject:模型或者数组 toFile:DocumentPath(@"freeOrderSelectedCar")];
3,解档
NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"freeOrderSelectedCar"];
模型或者数组 = [NSKeyedUnarchiver unarchiveObjectWithFile:file];
/* 实现下面的方法,说明哪些属性不需要归档和解档 */
+ (NSArray *)mj_ignoredCodingPropertyNames{
return @[@"name"];
}
B,保存数组或字典到本地(json数据的,如果是模型,则用上面的归档)
1, 字典转成二进制数据存到本地
NSData *resultData = [NSJSONSerialization dataWithJSONObject:字典或数组 options:NSJSONWritingPrettyPrinted error:nil];
[resultData writeToFile:DocumentPath(@"areas.plist") atomically:YES];
2, 读取本地数据
NSData *data = [NSData dataWithContentsOfFile:DocumentPath(@"areas.plist")];
//需要判断数据为nil情况,因为如果为nil则无法转成字典的
if (!isEmpty(data)) {
NSDictionary * resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];或
NSArray * resultArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
}
C,偏好设置(保存轻量级的数据)
//从沙盒里面读取键“key”对应的内容“值”
[[NSUserDefaults standardUserDefaults] objectForKey:<#key#>];
//把内容"value"存入到沙盒,对应的键是“key”
[[NSUserDefaults standardUserDefaults] setObject:<#value#> forKey:<#key#>];
//同步到沙盒;必须要写,不写会产生不可预测的Bug
[[NSUserDefaults standardUserDefaults] synchronize];
D,链表(针对数据量大,且为Json格式)(如果数据十分重要不容缺失则最好采用链表存储)(采用STDBManager库,如果找不到这个库,可以留下联系方式。后面我会放到github上面)
1,初始化数据库链表
- (instancetype)init
{
self = [super init];
if (self) {
// 创建缓存数据库表
[[STDatabaseManager sharedInstance] createTableWithName:TABLE_CACHE];
}
return self;
}
2,存储数据到链表(把json格式的数据存入的)
if (!isEmpty(json)) {
[[STDatabaseManager sharedInstance] putJsonObject:json withId:@“Key” intoTable:TABLE_CACHE];
}
3,读取数据(如果需要模型或模型数组,可以拿到的json数据转为模型或模型数组)
NSObject* data = [[STDatabaseManager sharedInstance] getJsonObjectById:@“Key” fromTable:TABLE_CACHE];
iOS数据存储到本地的几种方法的更多相关文章
- iOS数据存储之对象归档
iOS数据存储之对象归档 对象归档 对象归档是iOS中数据持久化的一种方式. 归档是指另一种形式的序列化,但它是任何对象都可以实现的更常规的类型.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文 ...
- iOS数据存储之属性列表理解
iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...
- iOS数据存储类型 及 堆(heap)和栈(stack)
iOS数据存储类型 及 堆(heap)和栈(stack) 一般认为在c中分为这几个存储区: 1栈 -- 由编译器自动分配释放. 2堆 -- 一般由程序员分配释放,若程序员不释放,程序结束时可能由O ...
- IOS 数据存储(NSKeyedArchiver 归档篇)
什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储. 归档的作用 之前将数据存储到本地,只能是字符串.数组.字 ...
- Docker的Mysql数据库:把数据存储在本地目录
Docker mysql 把数据存储在本地目录,很简单,只需要映射本地目录到容器即可 1.加上-v参数 $ docker run -d -e MYSQL_ROOT_PASSWORD=admin --n ...
- 将Excel数据导入mysql数据库的几种方法
将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...
- iOS开发之动画编程的几种方法
iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...
- 用easyui从servlet传递json数据到前端页面的两种方法
用easyui从servlet传递json数据到前端页面的两种方法 两种方法获取的数据在servlet层传递的方法相同,下面为Servlet中代码,以查询表中所有信息为例. //重写doGet方法 p ...
- IOS数据存储之NSUserDefaults
前言: 作为从事Android开发人来说一定听说过SharedPreferences,然后要成为一名ios开发工程师来说咋能不知道NSUserDefaults!接下来让我们认识一下. NSUserDe ...
随机推荐
- java 检测字符串中文乱码
1.检测是否为乱码 public static boolean isMessyCode(String strName) { Pattern p = Pattern.compile("\\s* ...
- Problem b 莫比乌斯反演+枚举除法的取值
莫比乌斯反演+枚举除法的取值 第二种形式: f(n)表示gcd(x,y)=n的数量. F(n)表示gcd(x,y)是n的倍数的数量. /** 题目:Problem b 链接:https://vjudg ...
- Maven 安装教程
Linux系统: 1.准本工作 Maven下载地址:http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven- ...
- mybatis慢查询配置
<?xml version="1.0" encoding="UTF-8"?> <!--suppress SpringFacetInspecti ...
- boost容器bimap简单使用
C++标准提供了map和multi_map,把key映射到value; 但是这种映射是单向的,只能是key到value,不能反过来; boost.bimap扩展了标准库映射型容器,提供双向 ...
- hdu 4284(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4284 思路:类似于poj3311:http://poj.org/problem?id=3311,首先f ...
- iOS开发之 -- oc和swift下输出乘法口诀表
闲来无事,写着玩: oc: //乘法口诀表输出 ; i<=; i++) { ; j<=i; j++) { NSLog(@"%dx%d=%d\n",i,j,i*j); } ...
- 面试题思考:BS与CS的区别与联系
简单的理解: bs是浏览器(browser)和服务器(server) cs是静态客户端程序(client)和服务器(server) 区别在于,虽然同样是通过一个程序连接到服务器进行网络通讯,但是bs结 ...
- NHibernate 1.0 Released 版本发布了
NHibernate is a port of Hibernate to the .NET platform. Hibernate is the leading open-source object- ...
- homebrew常用指令
其它Homebrew指令: brew list —列出已安装的软件 brew update —更新Homebrew brew home *—用浏览器打开 brew info *—显示软件 ...