iOS开发简记(8):数据持久化
数据持久化,也就是把数据保存到磁盘,以后可以再读取出来使用(也可以再次更改或删除)。很多场景需要数据持久化,比如为了减轻服务器的访问与存储压力,客户端需要在本地做一些数据持久化的工作。
iOS的数据持久化,有几种方式,包括:自定义格式的文件、plist、CoreData、FMDB等等。
这里记录基于CoreData的开源项目MagicalRecord的使用。经过封装,magicalrecord已经不需要接触到sql语句的编写。
(1)安装
小程还是使用cocoapods来安装,只需要在Podfile中增加:
pod 'MagicalRecord'
pod 'MagicalRecord/CocoaLumberjack'
然后在Podfile所在目录,执行命令pod install即可安装。安装完毕,在目标项目,可以看到magicalrecord的影子:
(2)使用
magicalrecord的读写操作,使用上依赖于context,相当于先在context上操作,之后才持久化(这一步不需要读者考虑)。
context的获取与创建有一系列的函数,其中,[NSManagedObjectContext MR_defaultContext]取得默认的context,只能使用于主线程;而其它context可以使用于非主线程,比如:[NSManagedObjectContext MR_context]。
在使用上,如果在主线程操作,甚至可以忽略对context的使用。
另外,需要注意,使用magicalrecord需要创建数据模型,也就是创建表的结构。
举个例子。
小程需要一张记录点赞的语音的id的表,只有一个字段,存放语音的id。
先是使用magicalrecord进行数据库的初始化与清理:
然后,创建这张点赞表的数据模型,按下面的截图操作:
这时会生成新的数据模型的文件,使用时import进头文件,比如是这样的一个数据模型(实体类)声明:
注意,不知道是不是xcode10.0的问题,在编译的时候会提示错误,说有两个数据模型文件生成同样的.o,而除了新生成的文件,在这个目录还会自动生成数据模型文件:/Users/username/Library/Developer/Xcode/DerivedData/ZhiYin-dhvbpzbqjhsnhucuczmcenxfdpqa/Build/Intermediates.noindex/ZhiYin.build/Debug-iphonesimulator/ZhiYin.build/DerivedSources/CoreDataGenerated,小程的解决办法是,把项目中新生成的文件移除掉(非删除),即可编译通过。
这里只创建了一个实体类,也就是一张表。如果想新建表,那就增加一个Entity,指定属性(字段),再创建对应的实体类即可。
之后,就可以使用这个实体类来进行读写操作。
比如,读取所有记录:
比如,增加记录:
比如,删除记录:
注意,对于增加、删除或修改,都需要对context进行保存,并且在指定的context上进行操作,比如:
本文演示的APP的源码:
https://github.com/crazy0363/sound-show-zhiyin
本APP已上架AppStore,欢迎您使用。地址:https://itunes.apple.com/cn/app/%E5%A4%A9%E6%B6%AF%E4%BD%95%E5%A4%84%E8%A7%85%E7%9F%A5%E9%9F%B3/id1439297254?mt=8&from=groupmessage&isappinstalled=0
或在AppStore搜索“觅知音”或“天涯何处”,下载安装。
iOS开发简记(8):数据持久化的更多相关文章
- iOS开发 - CoreData框架 数据持久化
Core Data Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还 ...
- iOS开发网络篇—数据缓存
iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...
- 李洪强iOS开发-网络新闻获取数据思路回顾
李洪强iOS开发-网络新闻获取数据思路回顾 01 创建一个继承自AFHTTPSessionManager的工具类:LHQNetworkTool 用来发送网络请求获取数据 1.1 定义类方法返回单例对 ...
- IOS开发UI基础--数据刷新
IOS开发UI基础--数据刷新 cell的数据刷新包括下面几个方面 加入数据 删除数据 更改数据 全局刷新方法(最经常使用) [self.tableView reloadData]; // 屏幕上的全 ...
- iOS 两行代码解决数据持久化
在实际的iOS开发中,有些时候涉及到将程序的状态保存下来,以便下一次恢复,或者是记录用户的一些喜好和用户的登录信息等等. 这就需要涉及到数据的持久化了,所谓数据持久化就是数据的本地保存,将数据从内存中 ...
- iOS中几种数据持久化方案
概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...
- iOS中几种数据持久化方案:我要永远地记住你!
http://www.cocoachina.com/ios/20150720/12610.html 作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启 ...
- App开发流程之数据持久化和编译静态链接库
先记录数据持久化. iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Co ...
- iOS开发,让数据更安全的几个加密方式
任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要.在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障.这篇 ...
随机推荐
- HDU 1162 Eddy's picture (最小生成树)(java版)
Eddy's picture 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 ——每天在线,欢迎留言谈论. 题目大意: 给你N个点,求把这N个点 ...
- mui 常见的效果
上传图片,预览图片: <!--upload--> <div id="feedback" class="mui-page feedback"&g ...
- mysql之变量
本文内容: 系统变量 用户变量 局部变量 首发日期:2018-04-18 系统变量: 系统变量就是系统已经提前定义好了的变量 系统变量一般都有其特殊意义.比如某些变量代表字符集.某些变量代表某些mys ...
- 编程经验点滴----巧妙解决 Oracle NClob 读写问题
最近一个新项目中,尝试在 Oracle 数据库中使用 NCLOB 来保存大的 xml 字符串. 在代码自动生成工具(通过 JDBC 驱动程序,读数据库表结构,自动生成对应的 java 代码,包含增加. ...
- (转载)彻底的理解:WebService到底是什么?
最近老是有人跟我提web service接口,怎么,怎么滴,我觉得很扎耳朵,web service是一种将服务器的服务封装起来的技术,表现为对外提供接口,所以,web service不是一种接口 !! ...
- [20181206]关于一致性读取3.txt
[20181206]关于一致性读取3.txt --//简单演示一致性读取以及如何读取undo重构数据块的.我不想转储对应的undo块,解析那些复杂的过程. 1.环境:SCOTT@book> @ ...
- 自动化测试基础篇--Selenium iframe定位问题
摘自https://www.cnblogs.com/sanzangTst/p/7473437.html 有时候我们在定位的途中发现一个现象,元素就在那儿,不离不去,但是我们怎么整就是定不了位,这个时候 ...
- python3基础知识梳理
一.数据类型 1.数字 int(整型) long(长整型) float(浮点型) complex(复数) 2.布尔值 True或False 3.字符串 二.变量 变量命名规则: 变量名只能是 字母 ...
- 了解 IP 地址,默认网关,子网掩码,DNS 的概念和作用。
DNS(Domain Name System):域名解析服务器,在 Internet 上域名与 IP 地址一一对应,域名便于人记忆,但是机器只认识 IP 地址,他们之间的转换工作称为 ‘域名解析’,域 ...
- LeetCode算法题-Add Digits(Java实现-3种解法)
这是悦乐书的第199次更新,第207篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第63题(顺位题号是258).给定非负整数num,重复添加其所有数字,直到结果只有一位数 ...