Core Data 多表关联
1.概念简介
coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表的关联使用.
如 课程表 和 章节表 的关系:一个课程跟章节的对应关系是 一对多,单一个章节只能对应一个课程; 而课程表 与 讲师表 之间的关系:一个课程可以有多个讲师,一个讲师也可以讲多个课程,他们之间是多对多的关系 .
表之间就是靠这种相互约束的关系建立关联.
下面以电影表和演员表进行代码演示:
创建的步骤 :
- #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 多表关联的更多相关文章
- Core Data 多表连接及查询
一:先建议两张表 Person,Score 分别代表,学生表,分数表 在 Person的Relationships里面建立关系,指向分数score 二:coreData生成的两个表: Person @ ...
- spring data jpa 表关联设置用户表关联角色表配置
User 表: @ManyToMany(cascade = { CascadeType.MERGE }) @JsonIgnore @JoinTable(name = "UserRole&qu ...
- salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- 序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询
查询窗口中可以设置很多查询条件 表单中输入的内容转为datagrid的load方法所需的查询条件向原请求地址再次提出新的查询,将结果显示在datagrid中 转换方法看代码注释 <td cols ...
- Core Data浅谈初级入门
Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...
- 《驾驭Core Data》 第三章 数据建模
本文由海水的味道编译整理,请勿转载,请勿用于商业用途. 当前版本号:0.1.2 第三章数据建模 Core Data栈配置好之后,接下来的工作就是设计对象图,在Core Data框架中,对象图被表 ...
- 《驾驭Core Data》 第二章 Core Data入门
本文由海水的味道编译整理,请勿转载,请勿用于商业用途. 当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...
- 《驾驭Core Data》 第一章 Core Data概述
<驾驭Core Data>系列教程综合了<Core Data for iOS>,<Learning Core Data for iOS>,<Core Data ...
随机推荐
- PL/SQL块与表达式
一.块(Block) 是PL/SQL的基本执行单元,由定义部分,执行部分(必须)和例外处理部分组成. Declare /*定义部分――定义常量.变量.游标.例外.复杂数据类型*/ Begin /*执行 ...
- Git报错:Please tell me who you are.
Git在提交的时候报错 Please tell me who you are. 报错 Please tell me who you are. 具体如下: 原因:明确报错.请告诉我你是谁.意思是你在提交 ...
- Java:JVM的内存模型
JVM内存模型 JVM内存模型可以分为两个部分,如下图所示,堆和方法区是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的. 1. 堆(Heap) 堆内存是所有线程共有的,可以分为两 ...
- 如何下载oracle jdk|oracle jdk下载慢,要登录等等问题
wget -c --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup ...
- UEFI分区损坏重建指南
自从国庆假期发了这两篇博客后,我这个人就像是从博客园消失了一样,半个多月没更新..自从10月5号把UEFI分区删掉之后,我的电脑就因为没有引导,找不到系统而无法使用了.所以这篇博客,就分享一下我在这半 ...
- Appium自动化测试教程-自学网-monkey日志管理
日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...
- 十五.DNS子域授权、分离解析、缓存DNS服务器
1.搭建基本DNS服务器 pc7: 1.1 安装软件包 ]# yum -y install bind-chroot bind bind //域名服务包 bind-chroot //提 ...
- css选择器:first-child与:first-of-type的区别
:first-child选择器是css2中定义的选择器,从字面意思上来看也很好理解,就是第一个子元素.比如有段代码: <div> <p>第一个子元素</p> < ...
- scrapy 分布式爬虫- RedisSpider
爬去当当书籍信息 多台机器同时爬取,共用一个redis记录 scrapy_redis 带爬取的request对象储存在redis中,每台机器读取request对象并删除记录,经行爬取.实现分布式爬虫 ...
- Lua 常用函数 一
lua_getallocf lua_Alloc lua_getallocf (lua_State *L, void **ud); 返回给定状态机的内存分配器函数.如果 ud 不是 NULL ,Lua ...