您的位置:首页 > 其它

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"]);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: