接着上一篇,上一篇中,我们简单的实现了一个用户实体,本次添加一个用户信息实体,与用户实体相关联,关系为1:1。
新建一个实体UserInfo:
添加字段:
下面就建立关系用户信息和用户之间的关系:
这是从User到UserInfo之间的关联。至于旁边
这里稍微解释下意思:
Name: 名称
Properties: Transient临时关系,暂时没理解。 Optional可选的,意思是有User不一定有UserInfo
Destination: 目标表
Inverse: 反向关系,这个看完下面就知道了
Delete Rule: 删除规则
Cascade:删除User就删除UserInfo
Deny:如果有UserInfo就不能删除User
Nullify: User和UserInfo都不删除,只是删除他们之间的关联
No Action: 呵呵
Type: 1:1 1:n,你懂的
接下来是反向关联
这里Inverse和上面Inverse相对应,秒懂~
然后就是重新生成代码 & Run
接着,更新我们控制器代码,如果不晓得代码,可以查看我上一篇博客 传送门
1 - (void)insertToDB:(NSString *)username password:(NSString *)password 2 { 3 User *u = (User *)[NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.cdContext]; 4 u.username = username; 5 u.password = password; 6 7 UserInfo *info = (UserInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"UserInfo" inManagedObjectContext:self.cdContext]; 8 info.age = @12; 9 info.sex = @1; 10 info.address = @"中国"; 11 12 u.userInfo = info; 13 info.user = u; 14 15 16 NSError *err; 17 if(![self.cdContext save:&err]) 18 { 19 NSLog(@"Error %@ %@",err.localizedDescription,err.localizedFailureReason); 20 } 21 22 } 23 24 - (void)readFromDb 25 { 26 NSFetchRequest *fetch = [[NSFetchRequest alloc] init]; 27 NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.cdContext]; 28 [fetch setEntity:entity]; 29 //限制只取1条 30 [fetch setFetchLimit:1]; 31 NSError* err; 32 NSArray *results = [self.cdContext executeFetchRequest:fetch error:&err]; 33 if(err) 34 { 35 NSLog(@"Error %@ %@",err.localizedDescription,err.localizedFailureReason); 36 return; 37 } 38 [results enumerateObjectsUsingBlock:^(User *_Nonnull user, NSUInteger idx, BOOL * _Nonnull stop) { 39 NSLog(@"----username:%@ password:%@ address:%@",user.username,user.password,user.userInfo.address); 40 }]; 41 }
Run and see ~
本篇博客结束,后续嘛,肯定有的,目前只是浅显的介绍下~
时间: 2024-10-25 23:07:38