数据持久化,也就是把数据保存到磁盘,以后可以再读取出来使用(也可以再次更改或删除)。很多场景需要数据持久化,比如为了减轻服务器的访问与存储压力,客户端需要在本地做一些数据持久化的工作。

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):数据持久化的更多相关文章

  1. iOS开发 - CoreData框架 数据持久化

    Core Data Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还 ...

  2. iOS开发网络篇—数据缓存

      iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...

  3. 李洪强iOS开发-网络新闻获取数据思路回顾

    李洪强iOS开发-网络新闻获取数据思路回顾 01 创建一个继承自AFHTTPSessionManager的工具类:LHQNetworkTool 用来发送网络请求获取数据  1.1 定义类方法返回单例对 ...

  4. IOS开发UI基础--数据刷新

    IOS开发UI基础--数据刷新 cell的数据刷新包括下面几个方面 加入数据 删除数据 更改数据 全局刷新方法(最经常使用) [self.tableView reloadData]; // 屏幕上的全 ...

  5. iOS 两行代码解决数据持久化

    在实际的iOS开发中,有些时候涉及到将程序的状态保存下来,以便下一次恢复,或者是记录用户的一些喜好和用户的登录信息等等. 这就需要涉及到数据的持久化了,所谓数据持久化就是数据的本地保存,将数据从内存中 ...

  6. iOS中几种数据持久化方案

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...

  7. iOS中几种数据持久化方案:我要永远地记住你!

    http://www.cocoachina.com/ios/20150720/12610.html 作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启 ...

  8. App开发流程之数据持久化和编译静态链接库

    先记录数据持久化. iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Co ...

  9. iOS开发,让数据更安全的几个加密方式

    任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要.在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障.这篇 ...

随机推荐

  1. 这几天上海移动网络可以直接打开 Google Play 了

    这几天上海移动网络可以直接打开 Google Play (谷歌应用商店)了. 速度还不错.基本无延迟. 想当初,为了防止国内应用市场里的木马或恶意软件,想从 Google Play 应用市场下载,折腾 ...

  2. UnrealEd3视图导航及常用快捷键

    本博客使用的版本:2010-08   [更多其他的UE3版本][tps所用版本: 2011-02]     [最新的UE3版本 -- 2015-02] [unreal engine wiki  中文w ...

  3. MS SQL作业Schedule的限制注意事项

      最近遇到了一个关于MS SQL作业Schedule下有限制的特殊案例,有一个作业,用户要求执行的时间为:9:30,14:30,16:30, 19:00,于是我设置了两个Schedule,其中一个每 ...

  4. ORACLE等待事件:SQL*Net message from client & SQL*Net message to client

    在ORACLE当中有两个很常见的等待事件"SQL*Net message from client"与"SQL*Net message to client",两者 ...

  5. CentOS7中安装MySQL5.7

    安装必要的组件 yum install –y autoconf automake imake libxml2-devel expat-devel cmake gcc gcc-c++ libaio li ...

  6. 使用 boost.asio 简单实现 异步Socket 通信

     客户端: class IPCClient { public: IPCClient(); ~IPCClient(); bool run(); private: bool connect(); bool ...

  7. DBUtils温习2

    上篇简单回顾了下DBUtils的简介和其常用的类,这篇博客结合C3P0连接池,做一个简单的增删改查操作 1.创建web项目,导入jar包 2.编写c3p0-config.xml和引入工具类 <? ...

  8. grep正则表达式搜索

    grep -n -e "INT32 *AdaptorPrmOp" --include "*.c"  -r ./ 搜索函数的定义 中间有n个空格

  9. JavaScript的内置对象(Math对象)

    Math对象概述 Math(算数)对象的作用是:执行常见的算数任务.保存数学公式和信息. 与我们在JavaScript 直接编写计算功能相比,Math 对象提供的计算功能执行起来要快得多. Math ...

  10. UltraISO制作Ubuntu14.04 64bit到U盘文件载入不完整

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zinss26914/article/details/37728251 前言 今天新买的Thinkpa ...