IOS数据管理工具CoreData入门之双向关系操作

本文深入介绍了iOS数据管理工具CoreData中双向关系的管理与操作,包括如何指定关系、删除规则以及一对多关系的应用。通过示例代码展示了如何实现账号与联系人的双向绑定,并详细说明了删除规则的设定对数据的影响。对于开发者来说,理解并掌握这些内容对于高效管理和维护数据结构至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IOS数据管理工具CoreData入门之双向关系操作是本文要介绍的内容,主要来介绍CoreData入门双向关系的操作和学习,不多说,我们先来看详细内容介绍。

双向的时候,只用指定一边,另外一边自动指定,比如,如果一个帐号只有一个联系人,而一个联系人对应一个帐号的话,那么帐号表和联系人表就是一一对应的关系,将他们指定为双向的,如下面将cnt1.act = act1; cnt2.act = cnt2;则act1.cnt和act2.cnt也是有值的。注释掉的两句可有可无。

删除规则

这里将Account表下面的cnt的删除规则设定为cascade,则在删除act1的时候,cnt1也被删除了。而Contact表没有将它下面的act的删除规则设置为cascade,在删除cnt1的时候,act1还存在。

一对多的关系

上面假设一个帐号只有一个联系人是不合理的,那只是一种假设,一般都是一个帐号下面有很多联系人,这就是一对多的关系,上面的两个法则也适用于这种关系,也就是说帐号下面的cnt设置为cascade,删除一个帐号时,它所有的联系人也被删除了,而联系人表下面的act设置为nullify,当删除一个联系人的时候帐号表没有变化。

  1.  Account *act1 = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:self.managedObjectContext];   
  2.   act1.passport = @"passport1";   
  3.   act1.password = @"password1";   
  4.   Account *act2 = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:self.managedObjectContext];   
  5.   act2.passport = @"passport2";   
  6.   act2.password = @"password2";   
  7.    Contact *cnt1 = [NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];   
  8.  cnt1.passport = @"passport1";  
  9.   cnt1.nickname = @"nickname1";  
  10.  cnt1.act = act1;  
  11.  Contact *cnt2 = [NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];  
  12.    cnt2.passport = @"passport2";  
  13.   cnt2.nickname = @"nickname2";  
  14.   cnt2.act = act2;  
  15. //    act1.cnt = cnt1;  
  16. //    act2.cnt = cnt2;      
  17.   [self.managedObjectContext save:nil];  
  18.   // Delete a Account  
  19.     NSFetchRequest *fr = [[NSFetchRequest alloc] init];  
  20.   NSEntityDescription *ed = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:self.managedObjectContext];  
  21.   [fr setEntity:ed];  
  22.        NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];  
  23.    for (Account *act in ary) {  
  24.       //NSLog(@"%@  %@  %@  %@", act.passport, act.password, act.cnt.passport, act.cnt.nickname);  
  25.          if ([act.passport isEqualToString:@"passport2"]) {  
  26.            NSLog(@"DEL passport2");  
  27.            [self.managedObjectContext deleteObject:act];  
  28.        }  
  29.    }  
  30.   [self.managedObjectContext save:nil];  
  31.   // Delete a Contact  
  32.    NSFetchRequest *fr = [[NSFetchRequest alloc] init];  
  33.    NSEntityDescription *ed = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];  
  34.   [fr setEntity:ed];  
  35.    NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];  
  36.   NSLog(@"%d", ary.count);  
  37.    for (Contact *cnt in ary) {  
  38.        //NSLog(@"%@  %@  %@  %@", act.passport, act.password, act.cnt.passport, act.cnt.nickname);  
  39.        if ([cnt.nickname isEqualToString:@"nickname1"]) {  
  40.            NSLog(@"DEL nickname1");  
  41.            [self.managedObjectContext deleteObject:cnt];  
  42.        }  
  43.    }  
  44.      
  45.   [self.managedObjectContext save:nil];  
  46.   // From Account62     NSFetchRequest *fr = [[NSFetchRequest alloc] init];  
  47.    NSEntityDescription *ed = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:self.managedObjectContext];  
  48.    [fr setEntity:ed];  
  49.    NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];  
  50.    for (Account *act in ary) {  
  51.        NSLog(@"%@  %@  %@  %@", act.passport, act.password, act.cnt.passport, act.cnt.nickname);  
  52.    }  
  53.    // From Contact73     NSFetchRequest *fr = [[NSFetchRequest alloc] init];  
  54.    NSEntityDescription *ed = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];  
  55.    [fr setEntity:ed];  
  56.    NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];  
  57.    for (Contact *cnt in ary) {  
  58.        NSLog(@"%@  %@  %@  %@", cnt.passport, cnt.nickname, cnt.act.passport, cnt.act.password);  

小结:IOS数据管理工具CoreData入门之双向关系操作的内容介绍完了,希望本文对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值