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 = ...
随机推荐
- adb shell 查看内存信息
1.根据包名来查看指定的APP指定数据adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数据没有参数名,可以参考这个命令来看:adb shel ...
- POJ--Lost Cows (线段树)
题目:http://poj.org/problem?id=2182 http://acm.hdu.edu.cn/showproblem.php?pid=2711 题意:有N头牛,编号为1-- ...
- 如何通过SVN管理好代码
来自:http://blog.csdn.net/baronyang/article/details/6942434 ------------------------------------------ ...
- Windows XP浏览器支持度
XP最多支持到IE8 谷歌已经结束对Windows XP版Chrome浏览器的支持. 2015年11月,谷歌表示会在2015年结束后,结束对Windows XP版Chrome浏览器的支持.而今,随着2 ...
- mac os Catalina beta andriod studio crash
点击菜单 Help - Edit Custom VM Options 添加下面一行-Dsun.font.layoutengine=icu 然后我自己重启了好几下,然后 在重新创建一个新的工程,就好了 ...
- SpringCloud学习笔记《---06 Config 分布式配置中心---》基础篇
- Windows Server 2003服务器清理C盘空间的资料多个解决方法
一.关闭IIS HTTPRERR日志功能 默认情况下,2003服务器会把所有IIS访问错误的记录写入 C:WINDOWSsystem32LogFilesHTTPERR 下的 log 文件中,如果访问量 ...
- leetcode-分治
题目169: 分治:O(nlgn) class Solution: def majorityElement(self, nums: List[int]) -> int: def majorE(l ...
- leetcood学习笔记-38-报数
---恢复内容开始--- 题目描述: 第一次提交: class Solution: def countAndSay(self, n: int) -> str: f = " for i ...
- Swig c++=>C#
1.下载swig https://sourceforge.net/projects/swig/files/ 2.配置环境变量 path 添加你的swig路径 3.创建项目解决方案和一个win32 dl ...