1.概念简介

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

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

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

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

创建的步骤 :

1>创建Data Model;
2>创建Movie,Actor表,设置外键;
3>创建NSManagedObject subclass;
 
代码实现 :
 #import "ViewController.h"
#import <CoreData/CoreData.h>
#import "Actor.h"
#import "Movie.h" @interface ViewController () {
NSManagedObjectContext *ctx; }
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; //1.应用程序包的路径
// NSLog(@"%@",[[NSBundle mainBundle] resourcePath]); NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MovieInfo.momd" ofType:nil]; //1.加载数据模型文件
NSManagedObjectModel *manageModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:filePath]]; //2.持久化数据存储调度器,指定存储的方式,负责应用与数据库之间的操作
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:manageModel]; //3.指定数据库的路径
NSString *dbfile = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/CoreData.db"];
NSLog(@"%@",dbfile); NSError *error = nil; //4.添加持久化存储的方式(可以是数据库,也可以是XML),并且会打开数据库
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:dbfile] options:nil error:&error]; if (error) { NSLog(@"打开数据库失败");
}else{
NSLog(@"打开数据库成功");
} //4.存储数据,更新数据,查询数据 上下文
ctx = [[NSManagedObjectContext alloc] init]; [ctx setPersistentStoreCoordinator:coordinator]; //5.添加电影数据
[self insertMovieData]; //6.查询电影数据
[self queryMovieData]; } //插入数据
- (void)insertMovieData{ //演员一
Actor *actor1 = [NSEntityDescription insertNewObjectForEntityForName:@"Action" inManagedObjectContext:ctx];
actor1.name = @"杰森斯坦森";
actor1.age = @;
actor1.height = @1.55; //演员2
Actor *actor2 = [NSEntityDescription insertNewObjectForEntityForName:@"Action" inManagedObjectContext:ctx];
actor2.name = @"汤姆克鲁斯";
actor2.age = @;
actor2.height = @1.60; //电影一
Movie *m1 = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:ctx];
m1.title = @"绝命速递";
m1.year = [NSDate date];
m1.rating = @9.7;
m1.actor = actor1; //电影二
Movie *m2 = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:ctx];
m2.title = @"壮志凌云";
m2.year = [NSDate date];
m2.rating = @9.2;
m2.actor = actor2; //电影三
Movie *m3 = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:ctx];
m3.title = @"速7";
m3.year = [NSDate date];
m3.rating = @9.5;
m3.actor = actor1; //将电影添加到上下文
[ctx insertObject:m1];
[ctx insertObject:m2];
[ctx insertObject:m3]; //保存
BOOL isSuccess = [ctx save:nil]; if (isSuccess) {
NSLog(@"插入数据成功!");
} } //查询数据
- (void)queryMovieData{ //查询斯坦森主演的电影
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Movie"]; //设置过滤条件
request.predicate = [NSPredicate predicateWithFormat:@"actor.name = '杰森斯坦森'"]; //查询
NSArray *result = [ctx executeFetchRequest:request error:nil];
for (Movie *movie in result) { NSLog(@"电影标题 :%@ 电影评分:%.2lf",movie.title,[movie.rating doubleValue]);
} }

Core Data 多表关联的更多相关文章

  1. Core Data 多表连接及查询

    一:先建议两张表 Person,Score 分别代表,学生表,分数表 在 Person的Relationships里面建立关系,指向分数score 二:coreData生成的两个表: Person @ ...

  2. spring data jpa 表关联设置用户表关联角色表配置

    User 表: @ManyToMany(cascade = { CascadeType.MERGE }) @JsonIgnore @JoinTable(name = "UserRole&qu ...

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

    建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...

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

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解   建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...

  5. 序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询

    查询窗口中可以设置很多查询条件 表单中输入的内容转为datagrid的load方法所需的查询条件向原请求地址再次提出新的查询,将结果显示在datagrid中 转换方法看代码注释 <td cols ...

  6. Core Data浅谈初级入门

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

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

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

  8. 《驾驭Core Data》 第二章 Core Data入门

    本文由海水的味道编译整理,请勿转载,请勿用于商业用途.    当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...

  9. 《驾驭Core Data》 第一章 Core Data概述

    <驾驭Core Data>系列教程综合了<Core Data for iOS>,<Learning Core Data for iOS>,<Core Data ...

随机推荐

  1. Markdown编辑器的使用测试

    北京高校(大标题) 北京电子科技学院(小标题) 计算机技术(一级标) 研究生(二级标) 列表(三级标) 姓名 - 扎西 - 卓玛 学号 - 01 - 02 超链接 [QQ邮箱](https://www ...

  2. js onclick事件传参

    传字符串参数 var html = "<a href='#' onclick='onedit(""+ row.name + "")';>编 ...

  3. tomcat 处理HTTP请求

    一.Tomcat是什么?Tomcat是一个Web应用服务器,同时也是一个Servlet/JSP容器.Tomcat作为Servlet容器,负责处理客户端请求,把请求传送给Servlet,并将Servle ...

  4. 我们什么时候应该在C程序中使用指针?

    回答: 传递大型结构喜欢服务器请求或响应数据包. 实现链表和二叉树. 使用GPIO或硬件寄存器. 从函数中获取地址或更新值(通过引用调用) 创建动态数组. 使用函数指针创建回调函数. 注意:除此之外, ...

  5. Java处理小数点后几位

    //方式一: //四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); , BigDecimal.ROUND_HALF_UP). ...

  6. 41、扩展原理-ApplicationListener用法

    41.扩展原理-ApplicationListener用法 ApplicationListener 监听容器中发布的事件.事件驱动模型开发: public interface ApplicationL ...

  7. 【解题报告】CSP2019-S D1T1 格雷码

    题目链接:https://www.luogu.org/problem/P5657 话说这道题怎么是道橙题啊. 基本思路 因为n位格雷码的前2n-1位就是n-1位格雷码前面加了一位‘0’,所以可以把它们 ...

  8. PHP基础语法之 三元运算符和其它运算符

    三元运算符和其它运算符 此外还有一些特殊的运算符和符号,我们再来进行讲解.可能以后我们需要用到.直线电机选型 符号 说明 $x? 真代码段:假代码段 判断是否为真假 ? 真情况 : 假情况; ``(反 ...

  9. 最短路--SPFA及其优化

    SPFA Shortest Path Faster Algorithm 最短路径最快算法 算法思想 SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路 ...

  10. 25 | MySQL是怎么保证高可用的?

    在上一篇文章中,我和你介绍了binlog的基本内容,在一个主备关系中,每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能 ...