CoreData 实体之间的关系
2015-09-27 14:25
316 查看
1. Cascade 级联关系。 2. Deny 禁止 3. Nullify 作废 当实体之间创建了关系的时候,我们需要判断是否建立级联关系。 例如 人和身份证是一对一的。两者之间关系反转。即 人有身份证,身份证包含人。当删除身份证的时候,人肯定不能被删除。所以 这就需要我们判断级联关系。
#pragma mark - 一对一 /** * 一对一的关系 */ - (void)oneToOne { CoreDataManager *manager = [CoreDataManager sharedManager]; // person Person *p = (Person *)[manager managedObjectWithEntityName:NSStringFromClass([Person class])]; [p setValue:@"小明" forKey:@"name"]; // card CardID *card = (CardID *)[manager managedObjectWithEntityName:NSStringFromClass([CardID class])]; [card setValue:@"1518" forKey:@"cID"]; // 这里已经建立了双向的关系 这种情况类似于 card为数据库中的外键。 // 小明的身份证为card [p setValue:card forKey:@"cardID"]; [manager saveData]; Person *person = [card valueForKey:@"person"]; NSLog(@"%@", [person valueForKey:@"name"]); }
#pragma mark - 一对多 /** * 一对多的关系 */ - (void)oneToMany { CoreDataManager *manager = [CoreDataManager sharedManager]; // teacher Teacher *t1 = (Teacher *)[manager managedObjectWithEntityName:NSStringFromClass([Teacher class])]; [t1 setValue:@"大力哥" forKey:@"name"]; Teacher *t2 = (Teacher *)[manager managedObjectWithEntityName:NSStringFromClass([Teacher class])]; [t2 setValue:@"大力哥2" forKey:@"name"]; // student Student *s1 = (Student *)[manager managedObjectWithEntityName:NSStringFromClass([Student class])]; [s1 setValue:@"学生1" forKey:@"name"]; Student *s2 = (Student *)[manager managedObjectWithEntityName:NSStringFromClass([Student class])]; [s2 setValue:@"学生2" forKey:@"name"]; Student *s3 = (Student *)[manager managedObjectWithEntityName:NSStringFromClass([Student class])]; [s3 setValue:@"学生3" forKey:@"name"]; // 老师1有两个学生 s1和s2 [t1 addStudentsObject:s1]; [t1 addStudentsObject:s2]; // 老师2有两个学生 s3 [t2 addStudentsObject:s3]; // 同步数据库 if ([manager saveData]) { NSLog(@"保存成功!"); } // 1. 查找学生3的老师 // 2. 查找老师1的学生 [self find]; } - (void)find { // 1. 查找学生3的老师 // 2. 查找老师1的学生 NSLog(@"---------1 .查找名字为学生3的学生----------"); // 查找名字为学生3的学生 NSArray *array = [[CoreDataManager sharedManager] quertObjsFromCoreDataWithEntityName 4000 :NSStringFromClass([Student class]) params:@{@"name":@"学生3"}]; for (Student *s in array) { NSLog(@"-----先找到名字为学生3的学生 才能找其老师----2.查找学生3的老师----------"); Teacher *t = [s valueForKey:@"teacher"]; NSLog(@"t_name = %@", [t valueForKey:@"name"]); } NSLog(@"---------查找名字为大力哥的老师----------"); // 查找名字为大力哥的老师 NSArray *array2 = [[CoreDataManager sharedManager] quertObjsFromCoreDataWithEntityName:NSStringFromClass([Teacher class]) params:@{@"name":@"大力哥"}]; for (Teacher *t in array2) { NSLog(@"-----先找到名字为大力哥的老师 才能找其学生----2.查找大力哥的学生----------"); NSSet *students = [t valueForKey:@"students"]; NSEnumerator *enumrator = [students objectEnumerator]; Student *s; while(s = [enumrator nextObject]) { NSLog(@"s_name = %@", [s valueForKey:@"name"]); } } }
相关文章推荐
- 总结学生选课Dao类相应代码,对应数据库表的内容进行修改
- 找回linux丢失的磁盘空间
- linux下C语言UDP通信
- UI:数据的解析XML与JSON
- 如何选择适合自己公司的移动办公系统?
- 20135223何伟钦—信息安全系统设计基础第二周学习总结
- leetcode007 Reverse Integer
- 从SQL server数据库取数据显示到Net Beans界面上
- Openstack 概念架构详解
- np_xtcxyczjh-IV 整理II[改良宏 重写双向链表接口 自动测试程序]
- java关键字——static
- 安卓报错 column '_id' does not exist 的解决
- 教程分享:如何实现Android沉浸式状态栏——教你让你的状态栏变个色!
- 线程池
- SDWebImage缓存图片的机制
- 解决输出中文乱码问题
- Android L SDK -- 一些有趣的新功能
- java---try和throws异常总结
- HTML表单与PHP进行数据交互
- HashMap TreeMap Hashtable LinkedHashMap 区别