博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发CoreData的多表关联
阅读量:7079 次
发布时间:2019-06-28

本文共 2682 字,大约阅读时间需要 8 分钟。

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
*)fetchRequest;@property (nullable, nonatomic, copy) NSString *age;@property (nullable, nonatomic, copy) NSString *name;@property (nullable, nonatomic, retain) Classes *studentClass;@property (nullable, nonatomic, retain) NSSet
*studentCourses;@end@interface Student (CoreDataGeneratedAccessors)- (void)addStudentCoursesObject:(Course *)value;- (void)removeStudentCoursesObject:(Course *)value;- (void)addStudentCourses:(NSSet
*)values;- (void)removeStudentCourses:(NSSet
*)values;@endNS_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 = @"13";    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];}

 

转载于:https://www.cnblogs.com/xianfeng-zhang/p/8301834.html

你可能感兴趣的文章
dwr框架异步调用简单小例
查看>>
httpclient中使用HTTPS的方法
查看>>
判断一棵二叉树是否为平衡二叉树
查看>>
springboot实现restful
查看>>
Python通过JSON-RPC请求对以太坊智能合约进行部署和交易
查看>>
MySQL8.0新特性
查看>>
打开android手机照相机
查看>>
电子商务和政府网站用户资料泄漏
查看>>
apk反编译
查看>>
Android内存泄漏分析实战
查看>>
排序算法
查看>>
Navicat 快捷键总结
查看>>
Windows Server 2012 之NIC组合(NIC Teaming)介绍
查看>>
电脑无需设置DNS网关该如何上网
查看>>
OpenSCAD函数一览表
查看>>
今天博客开通了
查看>>
Cisco etherchannel配置
查看>>
linux高可用性文件服务器群集之DRBD+NFS+Heartbeat
查看>>
python计算春节倒计时
查看>>
系统负载能力浅析
查看>>