技术博客http://www.cnblogs.com/ChenYilong/ 
新浪微博http://weibo.com/luohanchenyilong 

数据库-Core Data 

技术博客http://www.cnblogs.com/ChenYilong/

新浪微博http://weibo.com/luohanchenyilong
 
iOS应用数据存取的常用方式 
• XML属性列表 -- PList
• NSKeyedArchiver 归档 •Preference(偏好设置) • SQLite3
• Core Data

Core Data简介 
• Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象 的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效 地通过面向对象的接口管理数据 
• Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转 化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的 数据还原成OC对象 
• 在数据操作过程中,无需编写任何SQL语句 
• 要使用Core Data,需要导入CoreData框架 

APP
处理)
Controller -> View
|
Model
| Services(实际的数据 |
DB数据库文件 CoreData是封装好的数据库操作框架
数据

模型文件及实体(Entity)
• 要使用CodeData,首先需要定义模型文件,描述应用程
序中的所有实体(Entities)• 所谓实体,是跟数据库进行映射的对象 


NSManagedObject--对应数据库中的一条记录 


Core Data主要对象关系示意图 类似于数据库的句柄,handle,用来操纵数据库
                持久化存储调度者,是数据库与对象之间的

 
在开发中,只会用到一次,如果不理解,直接粘代码




Core Data主要对象
• NSManagedObjectContext:负责应用和数据库之间的交互(CRUD)
• NSPersistentStoreCoordinator:添加持久化存储库(如SQLite数据 库),是物理数据存储的物理文件和程序之间的联系的桥梁,负责管 理不同对象上下文
• NSManagedObjectModel:被管理的对象模型 •NSEntityDescription:实体描述 

打开数据库 
// 1. 实例化持久化的存储 
// 1.1 从Bundle中加载被管理的数据模型 
NSManagedObjectModel *model = [NSManagedObjectModelmergedModelFromBundles:nil];
// 1.2 实例化持久化存储调度 
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
...
// 1.3 添加持久化存储(SQLite)
[store addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nil URL:url options:nil
error:&error];
...
// 管理对象上下文 _context = [[NSManagedObjectContext alloc]init]; _context.persistentStoreCoordinator = store;



新增记录 
Person *p = [NSEntityDescriptioninsertNewObjectForEntityForName:@"Person"inManagedObjectContext:_context];
p.name = @"张三"; p.age = @18;
[_context save:nil]; 

查询数据--NSFetchedResultsControllerNSManagedObjectContext *context = [[DataManagersharedDataManager] sharedContext];
NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"Person"];
// 定义查询排序 NSSortDescriptor *sort = [NSSortDescriptorsortDescriptorWithKey:@"name" ascending:YES]; request.sortDescriptors = @[sort];
// 定义查询结果控制器 _fetchedResultController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
managedObjectContext:context sectionNameKeyPath:nilcacheName:nil]; ...
[_fetchedResultController performFetch:&error];

查询数据 
NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"Person"];
request.predicate = [NSPredicatepredicateWithFormat:@"%K LIKE '*52*' OR name CONTAINS '三'", @"phoneNo"];
NSArray *array = [_contextexecuteFetchRequest:request error:nil];

更新&删除记录 
1. 找到要更新、删除的记录 2. 更新:修改对象属性3. 删除:上下文删除对象 4. 上下文保存

Core Data的调试 

Thanks! 

技术博客http://www.cnblogs.com/ChenYilong/ 
新浪微博http://weibo.com/luohanchenyilong

数据库-Core Data的更多相关文章

  1. iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

                   在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...

  2. 工程日记之HelloSlide(3):如何使用Core Data数据库,以及和sqlite之间的对应关系

    Core Data 和 SQLite 是什么关系 core data是对sqlite的封装,因为sqlite是c语言的api,然而有人也需要obj-c的api,所以有了core data ,另外,co ...

  3. iOS之Core Data及其线程安全

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

  4. Core Data的一些常见用法

    一.简介 Core Data是一个纯粹的面向对象框架,其本质就是一个ORM(对象关系映射:Object Relational Mapping),能以面向对象的方式操作SQLite数据库.在实际开发中绝 ...

  5. SELF, self in CORE DATA

    Predicate SELF Represents the object being evaluated. CORE DATA Retrieving Specific Objects If your ...

  6. Core Data浅谈初级入门

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

  7. Core Data

    •   Core Data   是 iOS SDK   里的一个很强大的框架,允许程序员 以面向对象 的方式储存和管理数据 .使用 Core Data 框架,程序员可以很轻松有效 地通过面向对象的接口 ...

  8. 我为什么用 SQLite 和 FMDB 而不用 Core Data

    凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...

  9. Core Data 概述

    Core Data是一个模型层的技术.Core Data帮助你建立代表程序状态的模型层.Core Data也是一种持久化技术,它能将模型对象的状态持久化到磁盘,但它最重要的特点是:Core Data不 ...

随机推荐

  1. Spring管理过滤器:org.springframework.web.filter.DelegatingFilterProxy

    配置web.xml <filter>        <filter-name>springSecurityFilterChain</filter-name>     ...

  2. ant build.xml 解释!

    Ant的概念  Make命令是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨 ...

  3. mybatis_mysql

    SELECT round(avg(c.AVG_DELAY_TIME)) as AVG_DELAY FROM `result_road_saturation_day` a LEFT JOIN info_ ...

  4. JAVA字节流(读写文件)

    InputStream此抽象类是表示字节输入流的所有类的超类.需要定义 InputStream 的子类的应用程序必须始终提供返回下一个输入字节的方法. int available()返回此输入流方法的 ...

  5. C#中的静态常量(const)和动态常量(static和readonly)用法和区别

    C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景.工作原理 readonly为运行时常量,程序运行时进行赋 ...

  6. 【bzoj1005】[HNOI2008]明明的烦恼 Prufer序列+高精度

    题目描述 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 输入 第一行为N(0 < N < = 1000),接下来N行,第i+1行给出第i ...

  7. java中初始化块、静态初始化块和构造方法

    (所谓的初始化方法init()是另一回事, 在构造方法之后执行, 注意不要混淆) 在Java中,有两种初始化块:静态初始化块和非静态初始化块.它们都是定义在类中,用大括号{}括起来,静态代码块在大括号 ...

  8. 关于qt中的tr()函数

    关于qt中的tr()函数 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr (2)另一类人,确实是出于国际化的 ...

  9. BZOJ3527:[ZJOI2014]力——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3527 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 参考:https://ww ...

  10. Unity3D手游开发日记(7) - 适合移动平台的天气效果

    腾讯的天涯明月刀的天气很棒,以前我也在CE3的基础上做了一个效果差不多的,但是在手机上,还是斜下固定视角的游戏,是否还需要一个天气系统? 而且没有G-Buffer的支持,很多牛逼效果实现不了,比如角色 ...