iOS开发CoreData的多表关联
1、多表关联
多表关联,对SQL 数据库的操作,在一张表的数据中可以引用另外一张表里的数据。通过 Entity 实体中的 Relationships 来实现,比起传统的 SQL 数据库来,更加简单。
2、如何关联
本例中有三个实体Classes(班级)、Course(课表)、Student(学生),也就是三张表。
Student学生只会在一个班级,多张课表两种关联属性;对应的Classes班级只会有多少个学生一种对应关系;Course课表也和多少个学生一种对应关系。
以Student这个实体为例:studentCourses学生课表关联属性、studentClass学生班级关联属性。
1)Relationship:关联属性名
2) Destnation:关联属性的所属类
3)Inverse:所属类的关联属性
4)Delete Rule:删除规则
No Action:表示删除学生时,班级和课表不做任何处理(认为学生还在,会造成异常,不建议使用)
Nullify:表示删除学生时,班级和课表也会删除对应学生
Cascade:表示删除学生时,班级和课表也会全部删除(级联操作,如果班级和课表也有级联操作,相关表都会删除)
Deny:表示删除学生时,班级和课表会拒绝,只有班级和课表为nil时,才会删除学生
5)Type:To One 和 To Many 两种选择,一个学生只会在一个班级所有选择To One,而课表一对多选择To Many

另外两个实体的关联图:


注意:在没有创建Course和Classes的关联属性时,Student的关联关系中Inverse没有选项的;
如果在创建Course和Classes的关联属性之前创建了Student的关联属性,选择Course和Classes的Inverse之后,Student的Inverse会自动填充。
3、生成实体类
以Student为例,选择To Many时生成的是NSSet集合!
#import "Student+CoreDataClass.h" NS_ASSUME_NONNULL_BEGIN @interface Student (CoreDataProperties) + (NSFetchRequest<Student *> *)fetchRequest; @property (nullable, nonatomic, copy) NSString *age;
@property (nullable, nonatomic, copy) NSString *name;
@property (nullable, nonatomic, retain) Classes *studentClass;
@property (nullable, nonatomic, retain) NSSet<Course *> *studentCourses; @end @interface Student (CoreDataGeneratedAccessors) - (void)addStudentCoursesObject:(Course *)value;
- (void)removeStudentCoursesObject:(Course *)value;
- (void)addStudentCourses:(NSSet<Course *> *)values;
- (void)removeStudentCourses:(NSSet<Course *> *)values; @end NS_ASSUME_NONNULL_END
4、简单使用
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"===%@",NSHomeDirectory());
// Do any additional setup after loading the view, typically from a nib.
self.delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[self addData];
}
//添加一条数据
- (void)addData{
Student *newEintity = [NSEntityDescription insertNewObjectForEntityForName:Model_Name inManagedObjectContext:self.delegate.persistentContainer.viewContext];
newEintity.name = @"张三";
newEintity.age = @"";
Classes *newClass = [[Classes alloc] initWithContext:self.delegate.persistentContainer.viewContext];
// newClass.class_id = @"13";
// newClass.class_name = @"高二";
newEintity.studentClass = newClass;
Course *newCourse = [[Course alloc] initWithContext:self.delegate.persistentContainer.viewContext];
// newCourse.courseId = 1;
// newCourse.courseName =@"语文";
// newCourse.chapterCount = 23;
[newEintity addStudentCourses:[NSSet setWithObject:newCourse]];
[self.delegate.persistentContainer.viewContext save:nil];
}
iOS开发CoreData的多表关联的更多相关文章
- IOS开发中UITableView(表视图)的滚动优化及自定义Cell
IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITable ...
- iOS开发CoreData的简单使用
1.简介 CoreData是iOS5后,苹果提供的原生的用于对象化管理数据并且持久化的框架.iOS10苹果对CoreData进一步进行了封装,而且效率更高!相关类的简单介绍: NSManagedObj ...
- iOS开发 - CoreData框架 数据持久化
Core Data Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还 ...
- iOS开发之表视图爱上CoreData
在接触到CoreData时,感觉就是苹果封装的一个ORM.CoreData负责在Model的实体和sqllite建立关联,数据模型的实体类就相当于Java中的JavaBean, 而CoreData的功 ...
- iOS开发之多表视图滑动切换示例(仿"头条"客户端)---优化篇
前几天发布了一篇iOS开发之多表视图滑动切换示例(仿"头条"客户端)的博客,之所以写这篇博客,是因为一位iOS初学者提了一个问题,简单的写了个demo做了个示范,让其在基础上做扩展 ...
- IOS开发之表视图(UITableView)
IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于 ...
- iOS开发--数据库管理CoreData的使用
CoreData是iOS5后,苹果提供的原生的用于对象化管理数据并且持久化的框架.CoreData本质上是将底层数据库封装成对象进行管理.但数据库实际上只是CoreData的一个功能,并不是全部功能. ...
- CoreData 多表 关联
本文转载至 http://www.jianshu.com/p/e9f3b5e0cd19 1.概念简介 coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表 ...
- iOS开发tableView去掉顶部上部空表区域
tableview中的第一个cell 里上部 有空白区域,大概64像素 在viewDidLoad中加入如下代码 self.automaticallyAdjustsScrollViewInsets = ...
随机推荐
- vue3+node全栈项目部署到云服务器
一.前言 最近在B站学习了一下全栈开发,使用到的技术栈是Vue+Element+Express+MongoDB,为了让自己学的第一个全栈项目落地,于是想着把该项目部署到阿里云服务器.经过网上一番搜索和 ...
- 【idea】设置console控制台显示内容大小
Settings→Editor→General→Console 参考文章:https://blog.csdn.net/weixin_34363171/article/details/93444586
- shell 命令 修改文件权限 chmod
1. 所有者+.-权限 更改那个拥有者的权限 u 表示文件的所有者 g 表示文件所在的组 o 表示其他用户 a 所有,以上三者 增加 / 减少权限 + 表示增加权限 - 表示取消权限 更改具体 ...
- 字典配合split分裂填充
Sub 配送日报()lastrow = Sheets("运营日报").Range("a1048576").End(xlUp).Rowarr = Sheets(& ...
- 【数论】[SDOI2010]古代猪文
大概就是求这个: $$G^\sum_{k|N} C_{n}^{k}$$ 显然只要把后面的$\sum_{k|N}C_{n}^{k}$求出来就好了 几个要用的定理: 欧拉定理的推论:(a和n互质) $$a ...
- 什么是 Hexo?
Hexo 文档 欢迎使用 Hexo,本文档将帮助您快速上手.如果您在使用过程中遇到问题,请查看 问题解答 中的解答,或者在 GitHub.Google Group 上提问. 什么是 Hexo? H ...
- js基础(条件语句 循环语句)
条件语句 if语句块的语法形式如下: //只有两种情况下if(条件){要执行的语句块;}else{要执行的语句块;} //多种情况下if(条件){要执行的语句块;}else if(条件){要执行的语句 ...
- php获取本周、本月、本年的时间段
这是在TP框架里面自己用到的一个获取周.月.年时间段的方法.
- 如何检测 Web 服务请求丢失问题
导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领域,以更结构化的 ...
- Linux和Windows下ping命令详解
转:http://linux.chinaitlab.com/command/829332.html 一.Linux下的ping参数 用途 发送一个回送信号请求给网络主机. 语法 ping [ -d] ...