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);
}
}
输出结果如下,可以看到两张表(两个实体)成功的建立连接