一、概念

1.Core Data 是数据持久化存储的最佳方式

2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型

在Mac OS X 10.5Leopard及以后的版本中,开发者也可以通过继承NSPersistentStore类以创建自定义的存储格式

3.好处:能够合理管理内存,避免使用sql的麻烦,高效

4.构成:

(1)NSManagedObjectContext(被管理的数据上下文)

操作实际内容(操作持久层)

作用:插入数据,查询数据,删除数据

(2)NSManagedObjectModel(被管理的数据模型)

数据库所有表格或数据结构,包含各实体的定义信息

作用:添加实体的属性,建立属性之间的关系

操作方法:视图编辑器,或代码

(3)NSPersistentStoreCoordinator(持久化存储助理)

相当于数据库的连接器

作用:设置数据存储的名字,位置,存储方式,和存储时机

(4)NSManagedObject(被管理的数据记录)

相当于数据库中的表格记录

(5)NSFetchRequest(获取数据的请求)

相当于查询语句

(6)NSEntityDescription(实体结构)

相当于表格结构

(7)后缀为.xcdatamodeld的包

里面是.xcdatamodel文件,用数据模型编辑器编辑

编译后为.momd或.mom文件

二.代码的实现 :

 #import "ViewController.h"
#import "Movie.h" //导入框架
#import <CoreData/CoreData.h> @interface ViewController () {
NSManagedObjectContext *manageObjectContext; //上下文 }
@property (weak, nonatomic) IBOutlet UITextField *titleTextField;
@property (weak, nonatomic) IBOutlet UITextField *ratingTextField; - (IBAction)insertAction:(id)sender; - (IBAction)updateAction:(id)sender;
- (IBAction)deleteAction:(id)sender;
- (IBAction)queryAction:(id)sender; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; /* 1.应用程序包的路径
NSLog(@"%@",[[NSBundle mainBundle] resourcePath]); */ //加载文件 (注意加载的文件的类型,由上面程序语句得到)
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"MovieInfo.momd" ofType:nil];
//1.加载数据模型文件 本地文件用fileURLWithPath
NSManagedObjectModel *manageModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:filePath]]; //2.持久化数据存储调度器,指定存储的方式,负责应用与数据库之间的操作
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:manageModel]; //3.指定数据库的路径 NSString *dbFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/CoreData.db"];
NSLog(@"dbFilePath = %@",dbFilePath); //4.添加持久化存储的方式(可以是数据库,也可以是XML),并且会打开数据库 NSError *error = nil; [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:dbFilePath] options:nil error:&error];
if (error) {
NSLog(@"打开数据库失败!");
}
else{
NSLog(@"打开数据库成功!"); } //5.存储数据,更新数据 上下文
manageObjectContext = [[NSManagedObjectContext alloc]init]; //将上下文设置到调度器上
[manageObjectContext setPersistentStoreCoordinator:coordinator]; } //插入数据
- (IBAction)insertAction:(id)sender { //6.存储数据,将对象映射到数据库
Movie *movie = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:manageObjectContext]; movie.title = _titleTextField.text;
movie.rating = @([_ratingTextField.text doubleValue]);
movie.year = [NSDate date]; //将数据添加到上下文
[manageObjectContext insertObject:movie]; //将数据保存到数据库
BOOL isSuccess = [manageObjectContext save:nil];
if (isSuccess) {
NSLog(@"插入数据成功!");
}
else
{
NSLog(@"插入数据失败!");
} } //更新数据
- (IBAction)updateAction:(id)sender { //1.创建请求对象,请求对应的表
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Movie"]; //2设置过滤条件
request.predicate = [NSPredicate predicateWithFormat:@"rating = 3.6"]; //3.查询数据
NSArray *result = [manageObjectContext executeFetchRequest:request error:nil]; //4.遍历查询到的数据
for (Movie *m in result) { /* 更新查询到的电影信息
m.rating = @8.2; NSLog(@"标题:%@,时间:%@,评分:%@",m.title,m.year,m.rating);
*/ //删除查询到的电影信息
[manageObjectContext deleteObject:m];
} //5.保存数据
BOOL isSuccess = [manageObjectContext save:nil]; if (isSuccess) {
NSLog(@"更新数据成功!");
}
else{
NSLog(@"更新数据失败!"); } } //删除数据 删除查询到的电影信息数据
- (IBAction)deleteAction:(id)sender { // [manageObjectContext deleteObject:<#(NSManagedObject *)#>];
} //查询数据 request
- (IBAction)queryAction:(id)sender { //1.创建请求对象,请求对应的表
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Movie"]; //2.使用谓词设置过滤条件 /*
// 注意条件参数的单引号
NSString *str = [NSString stringWithFormat:@"title = '%@'",@"金刚狼"];
request.predicate = [NSPredicate predicateWithFormat:str];
*/ //3.模糊查询
NSString *str = [NSString stringWithFormat:@"title like '%@'",@"*q*"];
request.predicate = [NSPredicate predicateWithFormat:str]; //4.设置排序
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"self.rating" ascending:YES];
request.sortDescriptors = @[sortDescriptor]; //5.设置分页查询
request.fetchOffset = ; //设置起始位置
request.fetchLimit = ; //设置查询的数据条数 //6.查询数据
NSArray *result = [manageObjectContext executeFetchRequest:request error:nil];
for (Movie *m in result) { NSLog(@"标题:%@,时间:%@,评分:%@",m.title,m.year,m.rating);
} }

Core Data 的使用的更多相关文章

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

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

  2. Core Data的一些常见用法

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

  3. Core Data 使用映射模型

    Core Data 使用映射模型 如果新版本的模型存在较复杂的更改,可以创建一个映射模型,通过该模型指定源模型如何映射到目标模型. 创建映射模型,新建File,  Core Data 选择Mappin ...

  4. SELF, self in CORE DATA

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

  5. Core Data浅谈初级入门

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

  6. Core Data

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

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

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

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

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

  9. Core Data 概述

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

  10. 《驾驭Core Data》 第三章 数据建模

    本文由海水的味道编译整理,请勿转载,请勿用于商业用途.    当前版本号:0.1.2 第三章数据建模 Core Data栈配置好之后,接下来的工作就是设计对象图,在Core Data框架中,对象图被表 ...

随机推荐

  1. el-input maxlength 不限制长度

    背景: 小鱼最近使用 input输入框时想限制输入的长度, type = "number" 时,限制的长度无效,代码如下 <el-input v-model="fo ...

  2. 使用jQuery快速高效制作网页交互特效--初始jQuery

    一.  jQuery基本概念介绍           1.1 什么是jQuery一个javascript库,把常用方法写到一个js文件中,需要的时候直接调用即可学习jQuery就是学习一些方法    ...

  3. sql server 数据类型转换

    --这是显示转换类型,将字符串转成整形SELECT CAST('1' AS int),CONVERT(int,'1')--SqlServer也会隐式转换,如:用字符串乘以一个整形,--整形优先级要大, ...

  4. 节点(node)操作

    一.节点的属性 节点值页面中的所有内容,包括标签.属性.文本 nodeType,节点类型:如果是标签,则是1:如果是属性.则是2:如果是文本,则是3 nodeName,节点名字:如果是标签,则是大写的 ...

  5. linux 安装Apache服务器

    这篇文章先别看,,有些地方我不是很明白,写错了一些地方,正在咨询会linux的大神 安装好Apache就可以用Http访问或者下载电脑的文件了 我还是用 连接我的linux电脑 咱把Apache安装到 ...

  6. 「CF319E」Ping-Pong「线段树」「并查集」

    题意 规定区间\((a,b)\)到区间\((c,d)\)有边当且仅当\(c<a<d\)或\(c<b<d\). 起初区间集合为空.有\(n\)(\(n\leq 10^5\))次操 ...

  7. PHP全栈学习笔记27

    数组概述,类型,声明,遍历,输出,获取数组中最后一个元素,删除重复数组,获取数组中指定元素的键值,排序,将数组中的元素合成字符串. 数组概述,数组是存储,管理和操作一组变量. 数组类型为一维数组,二维 ...

  8. windows下安装php性能分析工具XHProf

    一.安装扩展 下载XHProf扩展:http://dev.freshsite.pl/php-extensions/xhprof.html 放入扩展文件:下载后解压出.dll文件,拷贝它到php的ext ...

  9. 如果对方网站反爬取,封IP了怎么办?

    放慢抓取熟速度,减小对目标网站造成的压力,但是这样会减少单位时间内的数据抓取量 使用代理IP(免费的可能不稳定,收费的可能不划算)

  10. Spring Cloud Gateway(四):路由定义定位器 RouteDefinitionLocator

    本文基于 spring cloud gateway 2.0.1 1.简介 RouteDefinitionLocator 是路由定义定位器的顶级接口,它的主要作用就是读取路由的配置信息(org.spri ...