COREDATA多实体,多表建立联系

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);
    }


}

输出结果如下,可以看到两张表(两个实体)成功的建立连接
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值