Core Data 入门
1. 基本概念
Core Data是一种被称为对象关系映射(Object-Relational Mapping,ORM)技术的实现。
Core Data 架构图如下:
五个概念:
(1)数据模型(Data Model)
(2)持久化存储(Persistent Store)
(3)持久化存储Corrdinator
(4)Managed Object和Managed Object上下文
(5)Fetch Request
2 数据模型
数据模型定义了对象的数据结构、对象的组织方式、对象之间的关系,以及对象的行为。
1. 实体
Core Data的实体可以看作OC中类声明类似的东西,使用实体时,可以当作使用一个OC类。
(1)特征(Property)
实体拥有3种特征:
a. Attributes(属性)
b. Relationships(关系)
c. Fetched Properties(提取属性)
(2)Attributes(属性)
Attributes在实体中的作用与OC类的变量实例相同——它们都用来装载数据。每个Attribute都有自己的类型。
(3)Relationships(关系)
Relationships定义了两个实体之间的关系。
Relationships可以一对一也可以一对多,并且始终需要链向某个特定的对象。
从OC的角度讲,一对一关系类似某个变量实例保存了指向另一个OC类实例的指针,而一对多关系则如同保留了一个指向诸如NSMutableArray或者NSSet这样的集合类的指针,它们可以容纳多个对象。
(4)Fetched Properties(提取属性)
Fetched Properties类似由某个已有对象发起的查询。
2. Fetch Requests(提取请求)
Fetched Property类似由某个已有对象发起的查询,那么Fetch Request则更接近对一个查询的类方法封装。
3. Configuration(配置)
Configuration是一组实体。不同的Configuration可以包含相同的实体。Configuration用来定义那些实体存储在哪个持久化存储中。
4. 数据模型类:NSManagedObjectModel
NSManagedObjectModel类代表内存中的数据模型。
可以把多个.xcdatamodel文件联合起来组成一个NSManagedObjectModel实例,从而为从多个文件中获取的所有实体创建一个数据模型。
合并main bundle中的所有.xcdatamodel未一个NSManagedObjectModel实例:
_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
5. 持久化存储和持久化存储助理
持久化存储,有时又称为后背存储(Backing Store),是Core Data用于存储数据的地方。
默认情况下,iOS设备上的Core Data使用应用程序Documents文件夹下的SQLite数据库为其持久化存储。
持久化存储并不由OC类来呈现,而是通过NSPersistentStoreCoordinator控制器来进行访问。本质上,它接受来自各种不同类对持久化存储的读取和写入触发,并且对这些访问加以队列化(Serialize)以保证相同时间不会有多个针对同一文件的调用,否则可能会触碰到文件或数据库死锁。
除了使用持久化助理(Persistent Store Coordinator)来进行存储的创建和与磁盘特定位置及数据模型相关联外,很少会直接使用它。相反,经常会用到的是一些高层Core Data调用,之后Core Data将负责与持久化存储助理进行交互以提取或写入数据。
6. 获取数据模型
持久化存储是iOS设备文件系统中的一个文件,它可以是SQLite数据库,也可以是普通二进制文件。
数据模型文件包含在一个或多个带有。xcdatamodel扩展名的文件中,它描述了应用程序数据的结构。
数据模型告诉持久化存储助理持久化存储中存储的所有数据的类型。
而持久化存储助理则提供其他Core Data类用于保存、提取和搜索数据。
3. Managed Object
实体定义了数据的结构,但它们并没有实际地持有任何数据,而真正的数据实例被称为Managed Object(管理对象或受控对象)。
在Core Data中处理的任何一个实体的实例都是NSManagedObject对象或者子类对象。
4. 键值(Key-Value)编程
与NSDictionary类相似,NSManagedObject支持一些与键值操作相关的方法,如valueForKey:和setValue:forKey:用于设置或获取属性值。
Core Data使用KVC来向Managed Object存储数据以及从其中获取数据。
KVC还包含Keypath这一概念。Keypath能够实现仅通过一条字符串,就可以遍历对象的层级结构。
NSString *employerName = [managedObject valueForKeyPath:@"whereIWork.name"];
5. Managed Object 上下文
Core Data包含一个对象,它建立了你的实体和Core Data其余部分之间的桥梁,它被称作Managed Object上下文(Context),通常称作“上下文”。
上下文维护着载入或者创建的所有Managed Object的状态,它还记录了Managed Object从上次保存或载入之后发生的改变。当你想要载入或搜索对象时,可以通过上下文来完成;当你想要将修改提交给持久化存储时,可以保存上下文;如果想撤销对某个Managed Object的修改,则仅仅需要请求上下文来实现。(没错,它处理了所有对数据模型实现撤销和重做操作的处理。)
(1)退出时保存
(2)从持久化存储载入数据
(3)Fetched Results Controller
NSFetchedResultsController被设计用于处理一个特定的工作,即管理从Core Data的Fetch Request返回的对象。如果指定了Delegate,那么底层数据发生变化时,Delegate将会获得通知。
Core Data 入门的更多相关文章
- 《驾驭Core Data》 第二章 Core Data入门
本文由海水的味道编译整理,请勿转载,请勿用于商业用途. 当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...
- Core Data入门
简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象. ...
- Core Data入门-备用
简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象. ...
- iOS: Core Data入门
Core Data是ORM框架,很像.NET框架中的EntityFramework.使用的基本步骤是: 在项目属性里引入CoreData.framework (标准库) 在项目中新建DataModel ...
- Core Data-备用
Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...
- Core Data浅谈初级入门
Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...
- Core Data (二)备
序 上次只是说了三个Core Data栈基本类.这次准备介绍一下常用的类. NSManagedObject Core Data是一次底层数据封装成面向对象的技术.最直接的表现就是在SQLite里面的一 ...
- 1. 初次尝试Core Data 应用程序(Core Data 应用开发实践指南)
本书以实践的方式讲解 Core Data,不会过早讲一些难懂的话题.从入门知识入手,演示如何为范例程序添加Core Data 支持,后续章节再依次讨论更复杂的话题. 1.1. Core Data 是什 ...
- Asp.Net Core WebAPI入门整理(三)跨域处理
一.Core WebAPI中的跨域处理 1.在使用WebAPI项目的时候基本上都会用到跨域处理 2.Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 3.使用方法简单 ...
随机推荐
- ruby 的数组操作
转自:http://fujinbing.iteye.com/blog/1126232 1. & [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3] ...
- VS2013下的64位与32位程序配置
VS2013下的64位与32位程序配置 在Windows 7 64bit和Visual Studio 2013下生成64位程序. 新建一个Visual Studio Win32 Console项目 ...
- Tornado部署与运行
运行多个Tornado实例 网页响应不是特别的计算密集型处理多个实例充分利用 CPU多端口怎么处理4.使用Supervisor监控Tornado进程安装(注意看是否需要指定使用python2版本) s ...
- L2TP/IPSec一键安装脚本
本脚本适用环境:系统支持:CentOS6+,Debian7+,Ubuntu12+内存要求:≥128M更新日期:2017 年 05 月 28 日 关于本脚本:名词解释如下L2TP(Layer 2 Tun ...
- FPGA与图像处理
用FPGA做图像处理最关键的一点优势就是:FPGA能进行实时流水线运算,能达到最高的实时性.因此在一些对实时性要求非常高的应用领域,做图像处理基本就只能用FPGA.例如在一些分选设备中图像处理基本上用 ...
- windows 我永远的最爱
我配置好这个真不容易.总结下,配置中没搞清楚发布远程日志网址的意思:每一个博客配置都不同,比如新浪.网易.51技术博客
- 20165226 2017-2018-4 《Java程序设计》第7周学习总结
20165226 2017-2018-4 <Java程序设计>第7周学习总结 教材学习内容总结 第十一章 JDBC与MySQL数据库 下载MySQL最新版本. 连接数据库 下载JDBC-M ...
- 安装SQL Servre2000时提示“command line option syntax error! type command /? for help”
问题: 当程序正在安装ms数据访问组件时,弹出错误提示框:command line option syntax error,type command/? for help,点击确定继续:到了程序正在安 ...
- 爬虫高性能相关(协程效率最高,IO密集型)
一背景常识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,采用串行的方式执行,只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是:串行并不意味着低 ...
- node的socket.io类库概述
socket.io是一个简单的小类库,该类库实现的功能类似于node中的net模块所实现的功能. 这些功能包括websocket通信,xhr轮询,jsonp轮询等. socket类库可以接受所有与服务 ...