COREDATA是数据持久化的一种,与FMDB的区别在于,coredata可以添加自定义类作为内容,例如添加一个person类,一个team类。这是FMDB的sqlite不能做到的。sqlite只能添加sql支持的基本数据类型。 下面我们一起来看一下coredata的多实体,也就是多个表关联的code如何实现。我们来通过demo一起实现一下。前面已经介绍过coredata的基本使用,如果有不明白的地方请参考上一篇微博coredata基础 http://blog.csdn.net/lee727n/article/details/71216089 ●建立两个实体,每个实体添加属性name,操作方法如以前,建好表后设置关联关系,点击style,可视化显示可以看到两张表 ●点击relationship设置两张表的关系,首先ctrl+拖拽给两张表建立联系,从一张表拉线到另一张表 ●在分析关系,球队和球员是一对多的关系。所以先点中Player的relationships设置为to one.再点击team的myPlayers设置为to many. ●将两张表选中,创建实体 ●首先编译验证代码是否报错。这与xcode版本设置有关。如果不报错请继续,如果出现报错提示 ●需要删除图片对应的这些生成代码,是因为代码冲突造成的报错 ●下面在demo中实现两张表的连接以及学一下COREDATA多实体的使用,通过代码我们可以验证是否两张表连接上了 首先引入我们需要用到的头文件。coredata的头文件,已经appdelegate
#import "AppDelegate.h" #import "Team+CoreDataProperties.h" #import "Player+CoreDataProperties.h"viewdidload中插入球员表还有球队表
//插入球队表 AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate; Team *t = [NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:app.persistentContainer.viewContext]; t.name = @"骑士队"; [app saveContext]; //插入球员表 Player *p = [NSEntityDescription insertNewObjectForEntityForName:@"Player" inManagedObjectContext:app.persistentContainer.viewContext]; p.name = @"詹姆斯"; //以下建立关系的代码二选一 // p.myTeam = t; [t addMyPlayerObject:p]; [app saveContext];可以看到建立联系时球队添加球员的方法,方法名对应球队的relationship属性 touchbegans方法中查询,通过球员表看是否可以查到球队名,验证两张表是否已经建立连接
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Player"]; AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate; NSArray *players = [app.persistentContainer.viewContext executeFetchRequest:request error:nil]; for (Player *p in players) { NSLog(@"%@是属于%@的",p.name,p.myTeam.name); } }输出结果如下,可以看到两张表(两个实体)成功的建立连接