你的位置:首页 > 操作系统

[操作系统]iOS CoreData 开发之数据模型关系


接着上一篇,上一篇中,我们简单的实现了一个用户实体,本次添加一个用户信息实体,与用户实体相关联,关系为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,你懂的

 

接下来是反向关联

 

接着,更新我们控制器代码,如果不晓得代码,可以查看我上一篇博客  传送门

 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)readFromDb25 {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 ~

 

本篇博客结束,后续嘛,肯定有的,目前只是浅显的介绍下~