Core Data. 单元目标 Core Data 简介 数据模型映射 Core Data 数据访问 生成实体类代码 Core Data 查询 2.

Slides:



Advertisements
Similar presentations
第二节 Flash 动态按钮的制作 铁王中学 王东强 学习目标: 1 、了解 ActionScript 在交互动画中的重要作 用 2 、知道 ActionsScript 程序的组成 3 、熟练使用按钮中的 ActionScript 控制动画 播放的操作,掌握按钮的创建和使用方法,
Advertisements

DCN 多核防火墙快速配置之 目的 NAT 配置 神州数码网络 蒋忠平.
PHPCMS 使用指南及二次开发向导 --- 系统设置篇 PHPCMS 网络培训课程 --- 系统设置篇 PHPCMS 项目部 王官庆制作 系统相关设置 1. 站点管理 2. 发布点管理 3. 系统其它设置 管理员设置 1. 角色定义 2. 管理员管理.
HistCite 结果分析示例 罗昭锋. By:SC 可能原因:文献年度过窄,少有相互引用.
细分曲面 傅孝明 SA 目录 细分曲面的基本思想 两个关键问题 一些基本概念 几种简单的细分曲面算法 细分曲面方法分类.
本幻灯为医用耗材集中询价采购网上操作说明,请参考收费说明、供应厂商流程等文件 综合学习。幻灯次序按操作次序进行,可配合自身用户名对照学习。 操作人员:所有类别 操作说明:所有标 new 标志的文件,务必仔细查看。原有用户名和信息均可继续使用,新 使用人员可点击注册申请使用.
计算机 在分析化学的应用 ( 简介 ) 陈辉宏. 一. 概述 信息时代的来临, 各门学科的研究方法都 有了新的发展. 计算机的介入, 为分析化学的进展提供了 一种更方便的研究方法.
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
系统调用 Embedded Operating Systems2 系统调用的意义 操作系统为用户态进程与硬件设备进行交互提 供了一组接口 —— 系统调用 把用户从底层的硬件编程中解放出来 极大的提高了系统的安全性 使用户程序具有可移植性.
第 4 章 抽象解释 内容概述 以一种独立于编程语言的方式,介绍抽象解释的 一些本质概念 – 将 “ 程序分析对语言语义是正确的 ” 这个概念公式 化 – 用 “ 加宽和收缩技术 ” 来获得最小不动点的较好的 近似,并使所需计算步数得到限制 – 用 “ 伽罗瓦连接和伽罗瓦插入 ” 来把代价较大的属 性空间用代价较小的属性空间来代替.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
计算机文化基础 第 13 章 多表操作. 多表操作 以前所进行的操作中,在同一时刻只能打开一个表文 件,这是单工作区操作。但是在有些情况下,我们需要同时 了解多个表文件中的内容,例如 图 8-1 。在表文件 Stud1.DBF 中,有姓名,班级,电话三项;在 Stud2.DBF 中, 有姓名,性别,籍贯,英语四个字段。在单工作区操作方式.
协同工作环境研究中心 协同共享 助力科研. 主要内容  认识协同及协同软件  协同科研软件 duckling 介绍.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
Linux 操作系统分析 主讲:陈香兰 助教:贾永泉、毛熠璐 (西区电三 421 ) Autumn 2007.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
第六章 文件管理. 程序设计中,文件是十分重要的,许多情况下, 使用文件可以高效地解决实际问题。有用的数据在后 备存储器上以文件的形式存储后,我们就可以通过文 件对数据进行访问、操作以及检索,这称为文件管理。 6.1 文件的分类 根据文件访问类型的不同,可以将文件分为三类: 顺序文件、随机文件和二进制文件。
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
操作系统原理课程设计指南 姜海燕 设计考核幻灯制作  1.1 封皮:系统名称,研制人员  1.2 目的及意义  1.3 功能设计:功能框图、用例图  1.4 结构设计:系统结构  1.5 核心技术及技术路线:画图  1.6 进度安排  1.7 人员安排  1.8.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 5 章 解线性方程组的直接法 实际中,存在大量的解线性方程组的问题。很多数值方 法到最后也会涉及到线性方程组的求解问题:如样条插值的 M 和.
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
东南大学计算中心 网站应用与实践 主讲人 吴俊. 2 东南大学计算中心 网站制作流程  确定主题、风格  规划栏目、收集素材  版面设计、配色  编辑页面  测试发布 FrontPage 要完成的任务.
多媒体制作工具 Authorware 在流程线上添加图标 引入素材 编辑图标属性. 标题拦 菜单栏 图标栏 设计 窗口 演示 窗口 工具栏.
Photoshop CS4 标准培训教程 第三章第三章 在 Photoshop CS4 中所谓的不规则选区指的是随意性强,不被局限在几何形状内, 他们可以是鼠标任意创建的也可以是通过计算而得到的单个选区或多个选区。在 Photoshop 中可以用来创建不规则选区的工具被分组放置到套索工具组、魔棒工具组.
9的乘法口诀 1 .把口诀说完全。 二八( ) 四六( ) 五八( ) 六八( ) 三七( ) 三八( ) 六七( ) 五七( ) 五六( ) 十六 四十八 四十二 二十四 二十一 三十五 四十 二十四 三十 2 .口算, 并说出用的是哪句口诀。 8×8= 4×6= 7×5= 6×8= 5×8=
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
1 第 7 章 存储过程、触发器和程序包 在很多时候,都需要保存 PL/SQL 程序块,以便 随后可以重新使用。这也意味着,程序块需要一个名 称,这样需才可以调用或者引用它。命名的 PL/SQL 程序块可被独立编译并存储在数据库中,任何与数据 库相连接的应用程序都可以访问这些存储的 PL/SQL 程序块。
系统介绍 一 二 系统登录 三 使用流程 四 信息维护 系统介绍 根据中国政府与有关国家政府签署的相互出具《最终用户和最终 用途说明》的协议,为了便利企业申办《最终用户和最终用途说 明》, 商务部机电和科技产业司委托中国国际电子商务中心开发了 《最终用户和最终用途说明》申请系统,企业可通过此系统填写.
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
学生成长成才导图填报指南 填报网址:
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
刘相兵 (Maclean Liu) 介绍 dbms_registry PL/SQL 程序包.
适用场景 应用背景 1 、企业使用电商平台作为前 台销售门户, NC 作为后台管 理软件; 2 、后台从商城平台自动定时 下载,快速导入到 NC 形成销 售订单,并按 ERP 业务规则 进行校验及触发后续流程; 3 、提高订单传递的及时性、 准确性、规范性,减少工作量, 降低出错率;
LOGO s 数控机床故障诊断与维修. 子项目 8 掌握 M 、 T 代码的工作原理并进行控制 冷却、转速、刀库等 。 任务 8.3 编制斗笠式刀库换刀 PLC 程序,排除故障.
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
名探柯南在侦查一个特大盗窃集团过程 中,获得藏有宝物的密码箱,密码究竟 是什么呢?请看信息: ABCDEF( 每个字 母表示一个数字 ) A :是所有自然数的因数 B :既有因数 5 ,又是 5 的倍数 C :既是偶数又是质数 D :既是奇数又是合数 EF :是 2 、 3 、 5 的最小公倍数.
新一代移动物联系统 MC MOBILE CONTROL 开启办公物联网时代 Product Promotion.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
本讲主要内容: 1. 如何登陆网站后台 2. 基础信息修改 3. 网站文章类型资料更新 4. 网站图片类型资料更新 5. 网站链接类型资料更新 本讲主要目的: 在结束本讲内容之后,能够按照客户的需求对网站的资料 进行实时更新操作。
Java 水晶报表. 目录 水晶报表开发 (CrystalReports 2008) Java 水晶报表 (JBuilder 2005) 报表项目布署 (WebSphere v6.1)
EC 营客通产品操作(九) EC 营客通产品操作(九) 400 电话 400 电话. 400 电话有助于提升企业形象,无论企业地址变更、机构 变化、人员变动,联系方式永远不变。且在 EC 上申请的 400 电话可以在 EC 平台上进行统一的 400 电话接听及 400 电话客服的管理。
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
企业产品标准信息公共服务平台 操作介绍 目录 一 、系统架构介绍 二 、企业产品标准自我声明填报系统 三 、企业产品标准公示系统.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
广东省电子政府采购网 广东省财政厅政府采购监管处 2011 年 3 月. 目录 1 用户注册登录 2 维护商品品牌 3 维护商品 / 配件信息 4 采购机构管理 5 用户信息维护.
文件和文件夹的管理. 看书 p82-p92 回答以下问题: 1. 看书 P82 表 3—3 回答,.bmp 是什么类型的文件。.exe 是什么类型 的文件 2. ? / \ > < | 能不能作为文件名来使用? 3. 如何启动资源管理器? 4. 文件的查看方式有哪些? 5. 按住什么键,可以一次选择多个连续的文件?
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
“ 百链 ” 云图书馆. 什么是百链云图书馆?1 百链云图书馆的实际效果?2 百链云图书馆的实现原理?3 百链云图书馆的价值?44 图书馆要做什么?55 提 纲.
参考文献管理软件. 常见参考文献管理软件 : 中文 : CNKI E-learning (目前免费) NoteExpress NoteFirst 英文: Refworks Endnote (网络版免费) Mendeley……
感谢您的关注 联系电话: – 677 手机: QQ :
八. 真核生物的转录 ㈠ 特点 ① 转录单元为单顺反子( single cistron ),每 个蛋白质基因都有自身的启动子,从而造成在功能 上相关而又独立的基因之间具有更复杂的调控系统。 ② RNA 聚合酶的高度分工,由 3 种不同的酶催化转 录不同的 RNA 。 ③ 需要基本转录因子与转录调控因子的参与,这.
张勤 人大报刊复印资料 专题全文数据库 简 介简 介 《人大报刊资料全文数据库》是中国人民大 学书报资料中心与北京博利群电子信息有限 公司联合开发研制的大型数据库光盘。它涵 盖面广、信息量大、分类科学、筛选严谨、 结构合理,是国内最具权威的社会科学、人.
Word 绘制流程图 图解图解图解图解. 第一步:绘制对象 打开一个 Word 空白文档。 在 “ 绘图 ” 工具栏上,单击 “ 自选图形 ” ,指向 “ 流程图 ” , 再单击所需的形状。 图解.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
第二节. 广告牌为什么会被风吹倒? 结构的稳定性: 指结构在负载的作用下 维持其原有平衡状态的能力。 它是结构的重要性质之一。
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
SCI 数据库检索练习参考 本练习完全依照 SCI 数据库实际检索过程而 实现。 本练习完全依照 SCI 数据库实际检索过程而 实现。 练习中,选择了可以举一反三的题目,读 者可以根据题目进行另外的检索练习,如: 可将 “ 与 ” 运算检索改为 “ 或 ” 、 “ 非 ” 运算检索 等等。 练习中,选择了可以举一反三的题目,读.
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Presentation transcript:

Core Data

单元目标 Core Data 简介 数据模型映射 Core Data 数据访问 生成实体类代码 Core Data 查询 2

Core Data 简介 3

Core Data 是 Cocoa 里面一套非常受欢迎的框 架,从 Mac OS X 10.4 提供以来,在 10.5 中 引入了完善的 schema 迁移机制,再到 iPhone OS 3.0 时被引入 Cocoa Touch ,这套 完善的框架都被认为是管理大量结构化数 据所首选的 Cocoa 框架,尤其是因为使用 Core Data 能大大减少需要手工编写的代码 量,就使它更受开发者欢迎了。 4

Core Data 简介 面向对象的程序员大多都不喜欢用基于 C API 去做数据持久化。 希望使用面向对象的编程去持久化数据。 使用 Core Data 是比较好的选择。 它是支持数据库方式,建立对象图。 – 通常使用 SQLite3 它是如何工作的? – 通过可视化的方式建立数据库和对象的映射 – 使用面向对象的 API 来查询对象 – 使用对象属性访问数据库中对应表的列 5

数据模型映射

如何创建数据模型映射 在 Xcode 里 , Resource 目录下新建文件并选 择 Data Model 7

如何创建数据模型映射 可以用已存在的类和它们的属性当作模板 – 但很少这样做,通常从头开始生成对象并映射 – 可以跳过这个窗口 8

.xcdatamodel 文件创建 这个文件用于建立对象和数据库的映射, 和.xib 文件类似。 9

创建实体 在数据库中实体对应为 “ 表 “ ,在我们的代码 里映射为 ” 对象 ” 。 – 这里 用 Photo 实体来代表照片 10 点击 + 号, 添加 一个实 体 修改实体 名为 Photo 对应实体类型 NSManageObject

给实体添加属性 属性映射为数据库的 “ 列 ” ,映射为对象属性 thumbnailURL 用于存储 URL, 使用它下载我们的照片缩略图 11 点击 + 号来 添加 属性 和修改 实体名 一样 属性的类 型 为 ”string”. 对应到代 码里为 NSString

属性选项 12 Optional: 对象创建时默认值应许为 空 Transient: 只有在对象端有这个属 性(不存到数据库中) Indexed: 为了提高属性搜索效率

增加另一个属性 增加 thumbnailData 属性,用于存储照片缩略图实 际的图片数据 13

创建另外一个实体 Photograhper 实体代表谁照了这张照片 14

建立两个实体间的关联关系 建立一个 ” 一对多 ” 关联关系 photos – 在对象中映射为 (NSSet *) – 一个摄像师拥有很多照片 15 通过 ”Add Relationship” 来增加关联 关系 关联关系 名称 指向 Photo 对象 它没有 ”inverse” 关系, 它们是 “ To-Many ” 的关联关系

双向关联 (inverse 关联关系 ) 在 Photo 实体上,增加 whoTook 关联关系,它指向 Photographer 实体。 whoTook 不是多对一关系,因此它是 NSManagedObject 属性 (而不是 NSSet ) 16 whoTook 是 Photos 的逆向 关联关系 箭头变 成双向

Core Data 数据访问

关于 Core Data 还有许多其它事情可以做 – 前面部分我们只关心创建实体,属性,关联关系 如何通过程序方式访问数据? – 需要用 NSManagedObjectContext 如何得到 NSManagedObjectContext – 在创建项目时,选择复选框 “User Core Data for storage” – 应用程序 代理 里有一些代码支持 Core Data – 最特别的是代理中有一个属性 ”managedObjectContext” – 正是利用这个对象去访问数据库中,创建或查询对象 18

如何创建一个新对象 19 NSEntityDescription 类方法返回一个 NSManagedObject. 所有来自数据库的对象不是 NSManagedObject 就是它的子类 通过传递参数方式来引用 NSManagedObjectContext – 上面的代码通常不是在应用程序代理中 – 不要把应用程序代理当成全局变量 – 所以必须在 API 中传递 NSManagedObjectContext(Controllers 等 ) – 通常,在视图控制器如下方式处理 Core Data 的显示 initInManagedContext: (NSManagedObjectContext *) Context NSManagedObject *photo = [NSEntityDescription inManagedObjectContext: (NSManagedObjectContext *) ctxt];

如何获得属性值 可以通过以下两个方法来访问 – ( id ) valueForKey: (NSString *)key; – (void) setValue: (id) value forKey:(NSString *)key; key 是对象映射中的属性名 – value 将被存储到数据库里 – 如果值没有被设置,默认是 nil 。 – 所有的值都是对象 – Binary data 值对应的是 NSData 对象 – “To-many” 映射的关联关系值对应为 NSSet 对象 一切都会为你管理 SQL 自动生成,数据延迟加载等 20

如何保存数据 数据修改 ( 写入 ) 都是花生在内存中,除非你 保存 – 任何时候一批数据变化,都应保存 – Save: 是 NSManagedObjectContext 的实例方法 – 保存之前,需要判断对象是否有改变 - ( BOOL ) hasChanges; 典型的代码块 – 所有错误都可以通过 NSError userInfo 来报告 21 -( void) saveChangesToObjectsInMyMOC: (NSManagedObjectContext *) context { NSError *error = nil; if ( [context hasChanges] && ![context save:&error]){ 错误! userInfo] ); abort();// 在这里生成崩溃 log, 用于调试 }

生成实体类代码

两种 Xcode 生成代码的方式 用我们创建的数据映射描述来创建新的实 体类 “Copy and paste” 方式 23

映射描述来创建新的实体类 在 Xcode 选择需要生成代码的实体 24

选择新建文件 选择 “Managed Object Class” 作为要创建文 件的类型 25

选择存放生成类的项目目录 只要点击 ”Next” 按钮 26

选择实体生成类 27

对应生成的文件 在 resource 目录下创建了两个文件 (.h,.m) – 为了目录不混乱,最好移到 Classes 目录下 28

“Copy and paste” 方式 在以下两种情况下使用 – 如果已经有 NSManagedObject 定制子类文件 – 或许想添加或改变一个属性并且需要代码生成 属性 29

30 选择需要生成 代码的属性 Copy 和 paste 生成的代码 到.h 或.m

生成的代码.h 31 Photo : NSManagedObject { (nonatomic, retain) NSData * (nonatomic, retain) NSString * (nonatomic, retain) NSManagedObject * Photographer : NSManagedObject { (nonatomic, retain) NSSet*

– 使用运行期机制拦截对象消息,在这种情况下, NSManagedObject 使用 valueForKey: 或 setValueForKey: 来 操作属性 – 使用. 记号来访问数据库实体 Photo *photo = [NSEntityDescription inM..] NSString * myThumbnail = photo.thumbnailURL; Photo.thumbnailData = … Photo.whoTook = …/ 一个摄像师对象,可以通过查询语句创建

NSFetchRequest 到目前为止,我们可以 – 通过 insertNewObjectForEntityForName:inManagedobjectContext : 来创建持久化 对象 – 通过 valueForKey:/setValueForKey 来 访问或改变属性 值 在 Core Data 框架里如何查询数据 – 可以通过执行 NSManagedObjectContext 中的 NSFetchRequest 来获 得查询数据 查询过程中涉及到的四个重要对象 – NSEntityDescription 指定查询那个实体(必须) – NSPredicate 指定获取那些实体对象(可选,默认获得所有对象) – NSSortDescription 指定返回数组的排序方式。(可选,随机的) – 指定一次获取多少对象或最大获取多少个对象。(可选,所有对 象) 33

创建 NSFetchRequest 查询代码块 通过实体描述来获取想要的对象 – request.entity = [NSEntityDescription inManagedObjectContext:ctxt]; – 通过 NSEntityDescription 来创建实体描述的实例 – 设置获取数据的大小或最大数 34 NSFetchRequest *request = [[NSFetchRequest alloc ] init]; request.entity = [NSEntityDescription inManagedObjectContext:ctxt]; request.fetchBatchSize = 20; request.fetchLimit = 100; Request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; Request.predictate = ….;

NSSortDescriptor 当执行 fetchRequst 对象时,它将返回一个存 NSManagedObject 对象数组。 数组是 “ 有序的 ” ,因此我们获取数据时通常想指 定顺序。通过给 fetchRequest 一列 “ 排序描述 ” 用它 来描述什么排序方式 也可以不用 selector 参数 (默认使用的方法 compare: ) selector: 参数只是一个方法,它可以对每个关键字 进行相互比较。 35 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] ascending: YES selector: (localizedCaseinsensitiveCompare:)];

NSPredicate 如何准确指定那些数据是我们想要从数据 库中获取的呢? predicateWithForm:arguments…. == – in tags”,(NSMagagedObject *)// tags 是 to-many 的关系 – “viewed > *)// viewed 是日期类型的属性 contains[c] *)// 匹配 name 属性的字 符串,大小些敏感 36 NSString *username NSPredicate *predicate = [NSPredicate contains username];

NSCompoundPredicate 用并且和或的运算方式组合 predicate 条件 37 NSArray * array = [NSArray arrayWithObjects:predicate1,predicate2,nil]; NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:array];

综合使用 Photographer 是 NSManagedObject 的子类 通过 photographerWithName 方法从数据库获取一 个 photographer 创建 fechRequest 对象 获取 davinlei 所拍的所有照片 38 NSManagedObject *photographer = [Photographer inManagedObjectContext] NSFetchRequest *request = [[NSFethcRequest alloc] init]; request.entity = [NSEntityDescription inManagedObjectContext:ctxt]; request.fetchBatchSize = 20; request.soreDescriptors = [NSArray arrayWithObject:[NSSortDescriptor ascending: YES]; request.predicate = [NSPredicate =

fetchRequst 实际获得的结果 使用 executeFetchRequest: error 方法 – 如果发生异常,则返回 nil( 详细错误信息查看 NSErro) – 如果没有任何匹配的对象,则返回空数组 – 如果有数据匹配,则返回 NSManagedObjectd 对象数组 – 如果不关心错误信息,可以传 NULL 给 error 参数 遍历结果 39 NSFetchRequest *request = …… NSError **error = nil; NSArray *results = [managedObjectContext executeFetchRequest:request error:&error]; NSManagedObject *photo = [results objectAtIndex:0]; For(Photo *photo in results ){….} Photo *photo = [results lastObject];// 返回 0 或 1 个对象

删除对象 如果对象之间有关联关系? – 如: 当删除 photograther 拍的最后一张照片,是否删除 photograther? – 可以在关联控制地方设置 选中 “Createing and Deleting Managed Objects” 40 [managedObjectContext deleteObject (NSManagedObject *) anObject];

Question? 41