Core Data 多表关联

1.概念简介

coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表的关联使用.

如 课程表 和 章节表 的关系:一个课程跟章节的对应关系是 一对多,单一个章节只能对应一个课程; 而课程表 与 讲师表 之间的关系:一个课程可以有多个讲师,一个讲师也可以讲多个课程,他们之间是多对多的关系 .

表之间就是靠这种相互约束的关系建立关联.

下面以电影表和演员表进行代码演示:

创建的步骤 :

1>创建Data Model;

2>创建Movie,Actor表,设置外键;

3>创建NSManagedObject subclass;

代码实现 :

  1 #import "ViewController.h"
  2 #import <CoreData/CoreData.h>
  3 #import "Actor.h"
  4 #import "Movie.h"
  5
  6
  7 @interface ViewController ()
  8
  9 {
 10     NSManagedObjectContext *ctx;
 11
 12 }
 13 @end
 14
 15 @implementation ViewController
 16
 17 - (void)viewDidLoad {
 18     [super viewDidLoad];
 19
 20     //1.应用程序包的路径
 21     //    NSLog(@"%@",[[NSBundle mainBundle] resourcePath]);
 22
 23     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MovieInfo.momd" ofType:nil];
 24
 25     //1.加载数据模型文件
 26     NSManagedObjectModel *manageModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:filePath]];
 27
 28     //2.持久化数据存储调度器,指定存储的方式,负责应用与数据库之间的操作
 29     NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:manageModel];
 30
 31     //3.指定数据库的路径
 32     NSString *dbfile = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/CoreData.db"];
 33     NSLog(@"%@",dbfile);
 34
 35     NSError *error = nil;
 36
 37     //4.添加持久化存储的方式(可以是数据库,也可以是XML),并且会打开数据库
 38     [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:dbfile] options:nil error:&error];
 39
 40     if (error) {
 41
 42         NSLog(@"打开数据库失败");
 43     }else{
 44         NSLog(@"打开数据库成功");
 45     }
 46
 47     //4.存储数据,更新数据,查询数据  上下文
 48     ctx = [[NSManagedObjectContext alloc] init];
 49
 50     [ctx setPersistentStoreCoordinator:coordinator];
 51
 52     //5.添加电影数据
 53     [self insertMovieData];
 54
 55     //6.查询电影数据
 56     [self queryMovieData];
 57
 58 }
 59
 60 //插入数据
 61 - (void)insertMovieData{
 62
 63     //演员一
 64     Actor *actor1 = [NSEntityDescription insertNewObjectForEntityForName:@"Action" inManagedObjectContext:ctx];
 65     actor1.name = @"杰森斯坦森";
 66     actor1.age = @50;
 67     actor1.height = @1.55;
 68
 69     //演员2
 70     Actor *actor2 = [NSEntityDescription insertNewObjectForEntityForName:@"Action" inManagedObjectContext:ctx];
 71     actor2.name = @"汤姆克鲁斯";
 72     actor2.age = @55;
 73     actor2.height = @1.60;
 74
 75     //电影一
 76     Movie *m1 = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:ctx];
 77     m1.title = @"绝命速递";
 78     m1.year = [NSDate date];
 79     m1.rating = @9.7;
 80     m1.actor = actor1;
 81
 82     //电影二
 83     Movie *m2 = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:ctx];
 84     m2.title = @"壮志凌云";
 85     m2.year = [NSDate date];
 86     m2.rating = @9.2;
 87     m2.actor = actor2;
 88
 89     //电影三
 90     Movie *m3 = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:ctx];
 91     m3.title = @"速7";
 92     m3.year = [NSDate date];
 93     m3.rating = @9.5;
 94     m3.actor = actor1;
 95
 96     //将电影添加到上下文
 97     [ctx insertObject:m1];
 98     [ctx insertObject:m2];
 99     [ctx insertObject:m3];
100
101
102     //保存
103     BOOL isSuccess = [ctx save:nil];
104
105     if (isSuccess) {
106         NSLog(@"插入数据成功!");
107     }
108
109 }
110
111
112 //查询数据
113 - (void)queryMovieData{
114
115     //查询斯坦森主演的电影
116     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Movie"];
117
118     //设置过滤条件
119     request.predicate = [NSPredicate predicateWithFormat:@"actor.name = ‘杰森斯坦森‘"];
120
121     //查询
122     NSArray *result = [ctx executeFetchRequest:request error:nil];
123     for (Movie *movie in result) {
124
125          NSLog(@"电影标题 :%@  电影评分:%.2lf",movie.title,[movie.rating doubleValue]);
126     }
127
128
129
130 }
时间: 2024-10-31 04:25:16

Core Data 多表关联的相关文章

salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema Builder 或者build-->schema Builder进入: 2.采用force.com Explorer通过自己写查询语句来查询数据. 此链接为force.com Explorer的下载链接:  http://force-com-explorer-beta.software.infor

[iOS] Core Data 代码速查表

文中代码均来源于:http://www.appcoda.com/introduction-to-core-data/ 希望学习 Core Data 的同学不要错过:)以下是我个人记录的一些常用代码片段. 有一个 Entity:Device,有三个属性:company.name.version. 1.获取 context 的方法: - (NSManagedObjectContext *)managedObjectContext { NSManagedObjectContext *context =

Core Data

简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的.简单地用下图描述下它的作用: 左边是关系模型,即数据库,数据库里面有张person表,person表里面有id.name.age三个字段,而且有2条记录: 右

Core Data-备用

Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需任何SQL知识就能操作他们. Core Data位于MVC设计模式中的模型层,一般需要在设备上存储结构化数据时,考虑使用SQLite或是序列化等方法,而Core Data是这两种方法的混合体,并增加了一些功能,提供了SQL强大威力,但是用起来又和序列化一样简单.Core Data能将应用程序中的对象

ios开发:Core Data概述

Core Data 概述 2005年的四月份,Apple 发布了 OS X 10.4,在这个版本中 Core Data 框架发布了.Core Data本身既不是数据库也不是数据库访问框架.相反,Core Data是一个完整的数据模型解决方案.可以简单理解为对持久层的封装,使得我们可以通过可视化建立数据模型,简化数据存取.即使不懂SQL语句,也依然可以使用Core Data.因为Core Data将底层的数据库SQL语句封装成了一套API,并可通过可视化操作来建立数据库的模型和表之间的关系,它甚至

iphone数据存储之-- Core Data的使用(一)(转)

地址:http://www.cnblogs.com/xiaodao/archive/2012/10/08/2715477.html 一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以后的版本中,开发者也可以通过继承NSPersistentStore类以创建自定义的存储格式 3.好处:能够合理管理内存,避免使用sql的麻烦,高效 4.构成: (1)N

Core Data的使用(二)备

一.基础概念深入 1.NSManagedObjectContext 被管理数据上下文就像便笺簿 当从数据持久层获取数据时,相当于把这些临时的数据拷贝写在便笺簿上,然后就可以随心所欲的修改这些值. 通过上下文,可以对数据记录NSManagedObject进行添加删除更改,记录更改后支持撤销和重做. 除非你保存这些数据变化,否则持久层的东西是不会变化. 通常我们将 controller 类或其子类与 Managed Object Context NSManagedObjectContext绑定,这样

Core Data入门

Core Data入门 标签: Core DataiosiOSIOS数据存取数据库数据持久化 简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的.简单地用下图描述下它的作用: 左边是关系模型,即数据库,数据库里

Core Data浅谈初级入门

Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的hibernate持久化框架,不过功能肯定是没有Hibernate强大的.简单地用下图描述下它的作用: 左边是关系模型,即数据库,数据库里面有张person表,person表里面有id.name.age三个字段,而且有2条记录: 右边是对