文档章节

Core Data 学习笔记(一)框架简介

灰大羊
 灰大羊
发布于 2015/07/26 17:41
字数 2300
阅读 180
收藏 3

目录

零、前言

学习iOS开发已经有一段时间了,由于一直没有系统的去从头到尾的学,多半是到AppCoda上面找文章来看,所以当真正开始想要做一个小应用时,却无从下手了。经过思考,感觉上应该是由于一直是看别人的教程,从头到尾的跟下来,但是却从来没有针对具体的细节进行思考的原因。所以开始打算在iOS应用开发过程中遇到的技术要点都深入的学习一下,然后整理成笔记,发在博客园、开源中国一个Github仓库当中。发在开源中国是因为感觉开源中国的社交氛围要好一些。至于单独开一个Github仓库,纯粹是处于一种备份的目的。左右这两个平台都支持Markdown格式,所以也就没所谓了。

笔记中所涉及的图片,大都来自每篇笔记最下面的参考文章当中。我将参考文章分为了两个类别,一个是在苹果开发者库中找到的教程,第二个是通过互联网找到的各类博客文章。

每篇笔记发表之后,我还会根据在实际使用中的新的发现以及在网络上看到的比较好的文章之后,整理出新的心得到对应的笔记当中。

一、简单介绍

Core Data框架是用来管理数据在iOS应用当中的持久化操作的一种方式。其具有如下特性:

  • 变更追踪及撤销操作
  • 数据实体关系维护
  • 延迟加载
  • 自动属性验证
  • 模式迁移
  • 可选择的与应用控制器层的集成以支持用户交互的同步
  • 对键值对变成和监视提供完整的、自动的支持
  • 在内存和用户界面中组合、过滤、组织数据
  • 额外数据仓库的自动化支持
  • 查询字符串
  • 合并策略

注意:

  • Core Data不是一个数据库管理系统(RDBMS),其只是一个用于操作数据的持久化框架
  • 使用Core Data,你仍然需要在真实的项目中编写代码以操作数据
  • Core Data不依赖Cocoa绑定

二、基础说明

2.1 基础CoreData框架结构

从下图可知,在CoreData框架中,我们首先要创建一个持久化数据库对象用于持久化数据的存储,需要一个持久化存储协调器,用于处理持久化库对象与被管理对象上下文之间的操作。然后需要一个持久化上下文对象,在持久化上下文当中,包含了各种需要持久化的实体。

输入图片说明

2.1.1 管理对象和上下文

持久化上下文(NSManagedObjectContext):当我们将数据从数据库中提取出来后,将会放到持久化上下文当中,在持久化上下文中,我们可以对数据进行各种操作,但是这种操作在执行“保存”之前,是不会影响到数据库中的原有数据的。

被管理实体对象(NSManagedObject):数据模型对象在CoreData中被称为“被管理对象”。所有的被管理对象都需要被放置到一个持久化上下文当中,这样才能够使用上下文对被管理对象进行插入、删除、修改等各种操作。持久化上下文将会监视对被管理对象的各种修改,这样持久化上下文才能够对这些修改进行“撤销”、“重做”以及“保存”等操作。

当你决定将上下文中的所有改变都写入数据库时,CoreData将会检测所有上下文中的数据对象的可用性,当所有的数据对象都可用时,将会将上下文中的修改都写入到数据库当中。

2.1.2 “数据提取”请求

为了使用持久化上下文从数据库中提取数据,需要创建一个数据提取请求对象(NSFetchRequest),数据提取请求对象用于描述你需要从数据库中提取怎样的数据出来,类似于其他ORM框架的查询条件。数据提取请求对象包含三个部分:想要操作的被管理实体对象名称,条件格式字符串(NSPredicate),条件数组(键值对)。如下图所示:

输入图片说明

将数据提取请求提交给持久化上下文,持久化上下文将从数据库中提取出满足数据提取请求的数据,作为被管理对象返回。提取返回的被管理对象将会自动加入接受请求的持久化上下文中,如果被提取的数据已经存在于持久化上下文当中,那么直接从持久化上下文档中返回这些符合提取请求条件的数据对象。

2.1.3 持久化存储协调器

持久化存储协调器(NSPersistentStoreCoordinator)如下图所示,是用于处理被管理对象上下文(一个或多个)与数据库(一个或多个)之间操作的。换句话说,在CoreData框架中,如果说最上层为持久化上下文,最下层为数据库的话,持久化存储协调器就是处于框架的中间层。

持久化存储协调器实际上是定义了一个栈。协调器被设计为供上下文访问的一个“面”,协调器将整合多个数据库,这样在上下文对象看来,就只有一个“数据库”存在。所有在上下文中处理的数据对象,都来自协调器,不论这些数据是否是来自一个真实的数据库。所有在上下文中对数据对象的处理,都将有协调器自动针对各个数据库进行处理。

输入图片说明

2.1.4 持久化存储

持久化存储(NSPersistentStore)是对某一个外部数据存储数据库文件或其他数据库在应用程序内的映射,以便可以使用持久化上下文进行操作。一般情况下,我们需要对一个持久化存储实例操作的,仅仅是指定其外部数据数据库的位置,其他的大部分有关数据持久化操作都是使用持久化上下文来进行的。

注意:

  • 虽然CoreData支持对SQLite的持久化管理,但是CoreData无法处理不是使用框架创建的SQLite数据库,也就是说,CoreData只能处理和持久化自己创建的SQLite数据库。

2.2 被管理对象与被管理对象模型

被管理对象模型(NSManagedObjectModel)提供用于描述被管理对象(NSManagedObject)纲要(Schema)。一般被管理对象模型可以使用"Xcode Data Model Design"工具创建。

被管理对象模型是一个实体描述对象的集合,每一个实体描述对象都是一个关于实体的元数据,包括实体名称、在应用中使用的实体名称(类实例变量/常量名)、实体属性以及实体与其他实体的关系。如下图所示:

输入图片说明

需要持久化的数据对象必须是NSManagedObject类的实例,或这个类的子类的实例。被管理对象类使用一个私有的内部存储来维护属性和实现被管理对象各种所需的基础行为。一个被管理对象有一个到实体描述的索引。这个索引关联到数据实体的元数据,包括实体名称以及关于实体属性和关系的描述信息。

注意:

  • 可以创建NSManagedObject的子类来丰富被管理对象的行为。

参考

官方文档

网摘文章

© 著作权归作者所有

灰大羊
粉丝 4
博文 96
码字总数 95147
作品 0
浦东
项目经理
私信 提问
Core Data 学习笔记 常用链接整理

目录 Core Data 学习笔记(一)框架简介 Core Data 学习笔记(二)被管理对象模型 Core Data 学习笔记(三)被管理对象 Core Data 学习笔记 应用示例 Core Data 学习笔记 常用链接整理 文章 ...

灰大羊
2015/07/31
0
0
Core Data 学习笔记 应用示例

目录 Core Data 学习笔记(一)框架简介 Core Data 学习笔记(二)被管理对象模型 Core Data 学习笔记(三)被管理对象 Core Data 学习笔记 应用示例 Core Data 学习笔记 常用链接整理 示例 ...

灰大羊
2015/07/30
0
0
Core Data 学习笔记(三)被管理对象

目录 Core Data 学习笔记(一)框架简介 Core Data 学习笔记(二)被管理对象模型 Core Data 学习笔记(三)被管理对象 Core Data 学习笔记 应用示例 Core Data 学习笔记 常用链接整理 五、被...

灰大羊
2015/07/29
125
0
如果只有一个月的时间学 iOS 开发,我们该做些什么?

一年前,我还是一个 Android 开发者。那时候我没有任何 iOS 编程相关的知识,我甚至没用过任何苹果的产品。然而,这已成为过去,现在我已经能同时开发 iOS 和 Android 应用了。 现在,我想给...

oschina
2017/03/09
3.3K
13
Core Data简介

Core Data简介 1.CoreData是iOS中数据持久化的最佳方式 2.Core Data以面向对象的方式存储和管理对象的。 3.CoreData最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据...

2016/09/23
2
0

没有更多内容

加载失败,请刷新页面

加载更多

你需要知道的 5 个 Linux 新手会犯的失误

Linux 爱好者们分享了他们犯下的一些最大错误。 终身学习是明智的 —— 它可以让你的思维敏捷,让你在就业市场上更具竞争力。但是有些技能比其他技能更难学,尤其是那些小菜鸟错误,当你尝试...

xiangyunyan
9分钟前
0
0
来迟了,用Python助你叠猫猫,抢618大红包!

目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 逛店铺流程回顾 5 代码全景展示 6 总结 0 引言 最近叠猫猫的活动可真是十分的火爆,每天小伙伴们为了合猫猫忙的可谓是如火如荼。为啥要叠猫猫...

上海小胖
16分钟前
0
0
FPGA 设备 USB Platform Cable USB

lsusbFuture Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC

MtrS
今天
4
0
lua web快速开发指南(6) - Cache、DB介绍

"数据库"与"缓存"的基本概念 数据库与缓存是服务端开发人员的必学知识点. 数据库 "数据库"是一种信息记录、存取的虚拟标记地点的集合统称. 比如现实生活中, 我们经常会用到文件柜、书桌等等数...

水果糖的小铺子
今天
9
0
Oracle分页查询语句的写法

Oracle分页查询语句的写法 Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,Oracle分页查询语句基本上可以按本文给出的格式来进行套用。   Oracle分...

康师傅
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部