iOS基础-CoreData--使用总结关联操作

东风不与周郎便,铜雀春深锁二乔!<太阳珊瑚>


  • <big>CoreData</big> 数据持久化框架是Cocoa API的一部分,它允许按照 实体-属性-值 模型组织数据,并以XML(做MAC-os用), 二进制, 或者SQLite数据文件的格式持久化数据. CoreData主要提供 对象-关系映射(ORM)功能,把OC对象转化为数据保存到文件,也可以数据转化成OC对象.

  • CoreData与SQLite区别 :
  • CoreData是官方推出的数据持久化框架,SQLite是苹果使用别人开发好的一个动态库,本质是关系型数据库.
  • CoreData是iOS平台下的一个数据持久化的方式,不可以跨平台使用,Sqlite可以跨平台使用.
  • ---- CoreData -----
    1: 可视化,不用再写 SQL 语句,大量简化代码.
    2: 可以实现多种文件格式 : NSSQLLiteStoreType, BSXMLStoreType 等
    3: 与iOS紧密结合, 只能用于开发iOS.
    4: 存储内容, 以对象的形式存储, 符合面向对象的思想.
  • ---- SQLite ----
    1: 是一个轻量级数据库而且功能强大的关系型数据库, 很容易被嵌入到应用当中, 可移植性高, 可以在多个平台使用.
    2: 和CoreData 不一样的是, SQLite 是使用程序式的.sql的主要操作方法,是直接操作数据
    3: 基于C接口, 使用SQL语句, 代码繁琐.
    4: 在处理大量数据时,表关系更直观一些,
    5: OC中不是可视化的
  • 核心对象:

NSPersistentStoreCoordinator 数据连接器类(中间人,不能直接控制)
NSManagedObjectContext 数据管理器类 (临时数据库 )
NSManagedObject 数据管理类
NSManagedObject 数据模型器类
NSEntityDescription 实体描述类

  • NSManagedObjectContext (被管理的上下文)
    1: 操作实际内容 (对持久层的一个操作)
    2: 插入数据, 查询数据, 删除数据,修改数据
    3: 是我们开发中主要交互的类, 数据的CRUD都通过这个Context(上下文)去触发命令并返回结果.
  • NSManagedObjectModel (被管理的数据模型)
    1: 包含了各个实体(表)的定义信息, 包含了表或者是数据库的结构.
    2: 用来添加实体的属性,建立属性之间的关系.
    3: 操作方法: 视图编辑器,也可以用代码.
    4: 构建整个数据库的表结构, 表字段类型, 表与表之间的关系等等, 凡是和数据结构有关系的定义, 通通都通过这个类来管理.

  • NSPersistentStoreCoordinator (持久化数据助理)
    1: 相当于数据库的连接器
    2: 作用: 设置数据存储的名字, 位置,存储方式, 存储时机.
    3: 原理: 从下层文件取出数据, 交给上层的被管理的对象上下文
    4: 实际上这个类才是真正意义上跟数据库(.sqlite文件)打交道的,主要是根据 NSManagedObjectModel 执行表结构的建立通过 NSManagedObjectContext的命令执行数据交互.

  • 操作的思想流程:

context想要获取值,先要告诉连接器,我要什么东西,连接器再告诉store,你给我什么东西,store去找,找到之后返回给context.

CoreData核心关系类

CoreData 数据库的简单操作:

.xcdatamodeld里:
  1. Add Entity 添加实体类
  1. 修改实体类名
  2. 修改属性名与类型
  3. 创建文件 command+N —> CoreData —> NSManageObjuect subclass

一般使用的步骤:

// 导入CoreData框架
// 导入需要的类


#import <CoreData/CoreData.h>
#import "Person.h"
#import "AppDelegate.h"

第一步: 当前自身的数据库连接器与APP的绑定

//通过单例的代理协议的代理人,获取到我们最开始使用的 AppDelegate 

    AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
    
//获得 数据库的数据连接器 (定义一个`@property (nonatomic, strong) NSManagedObjectContext *objectContext;`)

    self.objectContext = app.managedObjectContext;
  • 向数据库添加数据:

方式1:
/NSEntityDescription :实体描述类,通过类方法创建
//参数1 :表示这个实体描述类描述的是哪个实体
//参数2 :表示的是在context里创建一个描述,告诉context我要往里面插入以object了
NSEntityDescription *description = [NSEntityDescriptionentityForName:@"Person" inManagedObjectContext:self.objectContext];
//创建一个实体类
//参数1 :实体类描述
//参数2 :在context里放入这个类
Person person = [[Person alloc] initWithEntity:description insertIntoManagedObjectContext:self.objectContext];
方式2: 上面的两步骤合并为一个步骤
/

Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.objectContext];
/
//把context保存到本地
//这个方法执行之后,本地数据才发生改变
NSError
error =nil;
[self.objectContext save:&error];
if(error ==nil)
{
NSLog(@"保存正确"); // 可以再次重新加载数据
}else
{
NSLog(@"错误%@",error);
}

- 删除数据
>```code
// 获取想要删的数据 依情况而定
Person *person = self.dataArray[indexPath.row];      
// 在context中将这条数据删除
  [self.objectContext deleteObject:person];
   NSError *error = nil; 
// 保存一下
  [self.objectContext save:&error];               
if (error == nil) { 
NSLog(@"删除成功");
 }```

- 修改数据
>```code
  // 知道改谁  找到你要改的对象
    Person *person = self.dataArray[indexPath.row];
// 修改值    
int number = arc4random() % 2000;
person.name = [NSString stringWithFormat:@"%d 好", number];   
// 保存修改的东西到数据库
NSError *error = nil;
[self.objectContext save:&error];
 if (error == nil) 
{ 
NSLog(@"修改成功了");
}   
  • 查询数据

//创建一个查询操作,查询哪个表里的内容
NSFetchRequestrequest = [[NSFetchRequest alloc] initWithEntityName:@"Person"];
//接收查询数据
NSError
error =nil;
// 返回的是一个查询结果的数组所以接收一下
NSArray*array = [self.objectContext executeFetchRequest:request error:&error];
//判断error
if(error ==nil) {
//如果是,那就查到成功 可以放到dataArray里面然后去加载视图显示 可以通过谓词按照你的需求去查找
NSLog(@"查找成功!");
}



------------------
多表的关联
--------------

















![](http://upload-images.jianshu.io/upload_images/1523603-bb23784e6b24dd72.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1523603-708c69d7eb4b4925.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)















![](http://upload-images.jianshu.io/upload_images/1523603-192a931d8284a4f8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)




![](http://upload-images.jianshu.io/upload_images/1523603-a10ba49d8614c0d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)






![](http://upload-images.jianshu.io/upload_images/1523603-82d7510c0611d0b5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容