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

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. PL/SQL块与表达式

    一.块(Block) 是PL/SQL的基本执行单元,由定义部分,执行部分(必须)和例外处理部分组成. Declare /*定义部分――定义常量.变量.游标.例外.复杂数据类型*/ Begin /*执行 ...

  2. Git报错:Please tell me who you are.

    Git在提交的时候报错 Please tell me who you are. 报错 Please tell me who you are. 具体如下: 原因:明确报错.请告诉我你是谁.意思是你在提交 ...

  3. Java:JVM的内存模型

    JVM内存模型 JVM内存模型可以分为两个部分,如下图所示,堆和方法区是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的.   1. 堆(Heap) 堆内存是所有线程共有的,可以分为两 ...

  4. 如何下载oracle jdk|oracle jdk下载慢,要登录等等问题

    wget -c --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup ...

  5. UEFI分区损坏重建指南

    自从国庆假期发了这两篇博客后,我这个人就像是从博客园消失了一样,半个多月没更新..自从10月5号把UEFI分区删掉之后,我的电脑就因为没有引导,找不到系统而无法使用了.所以这篇博客,就分享一下我在这半 ...

  6. Appium自动化测试教程-自学网-monkey日志管理

    日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...

  7. 十五.DNS子域授权、分离解析、缓存DNS服务器

    1.搭建基本DNS服务器 pc7: 1.1 安装软件包 ]# yum -y install bind-chroot bind bind         //域名服务包 bind-chroot  //提 ...

  8. css选择器:first-child与:first-of-type的区别

    :first-child选择器是css2中定义的选择器,从字面意思上来看也很好理解,就是第一个子元素.比如有段代码: <div> <p>第一个子元素</p> < ...

  9. scrapy 分布式爬虫- RedisSpider

    爬去当当书籍信息 多台机器同时爬取,共用一个redis记录 scrapy_redis 带爬取的request对象储存在redis中,每台机器读取request对象并删除记录,经行爬取.实现分布式爬虫 ...

  10. Lua 常用函数 一

    lua_getallocf lua_Alloc lua_getallocf (lua_State *L, void **ud); 返回给定状态机的内存分配器函数.如果 ud 不是 NULL ,Lua ...