【CoreData】表之间的关联
// 1.创建模型文件 (相当于一个数据库里的表)
// New File ———— CoreData ———— Data Model ———— Next
// 2.添加实体 (相当于一张表)
// 找到我们创建的模型文件(xxx.xcdatamodeld,我创建的叫School.xcdatamodeld)————Add
Entity ———— 添加表内属性(这边我添加2个属性(name,age))
//3.在此模型文件内我们再添加第二张表Classes,表内的属性(这边我添加一个属性(classname,classNo))
// 4.因为学生肯定是属于某个班级的,所以我们选择学生的表,在表中的Relationships内添加关联。
// 5.添加完关联后我们就需要创建实体了,在创建的过程中,我们会看到school内有2张表(student,classes),因为classes是没有关联任何表的(student则关联\依赖classes表),所以先创建classes实体,再创建student的实体。
// New File ———— CorData ———— NSManagedobject subclass ————Next(记得选择需要关联的表)这样就会自动生成相应的模型
// 5.1先关联classes表
// 5.2再关联student表
// 5.3生成以下相应模型
// 6.生成上下文 关联模型文件生成数据库(关联的时候,如果本地没有数据库文件,CoreData会自己创建)
// 上下文,记得引用CoreData框架
NSManagedObjectContext *context= [[NSManagedObjectContext alloc]init];
// 上下文关联数据库
// model模型文件, 参数:mergedModelFromBundles:因为模型文件是资源文件,所以会放到BUNDLES里面,所以只需要写nil就可以了。
NSManagedObjectModel *model= [NSManagedObjectModel mergedModelFromBundles:nil];
// 持久化存储调度器(持久化:把数据保存在一个文件,而不是放在内存中)
NSPersistentStoreCoordinator *store=[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
// 告诉CoreData数据库的名字和路径
NSString *doc=
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sqlitePath=[doc stringByAppendingPathComponent:@"School.sqlite"];
[store addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nilerror:nil];
context.persistentStoreCoordinator =store;
#pragma mark - 添加
- (void)addStudent
{
// 创建两个班级一班,二班
Classes*oneClass= [NSEntityDescriptioninsertNewObjectForEntityForName:@"Classes"inManagedObjectContext:_context];
oneClass.classname=
@"一班";
oneClass.classNo=
@(1.0);
Classes*twoClass= [NSEntityDescriptioninsertNewObjectForEntityForName:@"Classes"inManagedObjectContext:_context];
twoClass.classname=
@"二班";
twoClass.classNo=
@(2.0);
// 创建两个学生对象
Student*zhangsan= [NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:_context];
zhangsan.name=
@"张三";
zhangsan.age=
@(1.80);
zhangsan.classNo= oneClass;
Student*lisi= [NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:_context];
lisi.name=
@"李四";
lisi.age=
@(2.10);
lisi.classNo= twoClass;
//
直接保存数据库
[_contextsave:nil];
}
#pragma mark - 读取
- (void)readStudent
{
// 只读取二班的学生
// 1.FectchRequest
抓取请求对象
NSFetchRequest
*request= [NSFetchRequest fetchRequestWithEntityName:@"Student"];
// 2.设置过滤条件
//这边直接使用点语法就可以了
NSPredicate*pre= [NSPredicatepredicateWithFormat:@"classNo.classname=
%@",@"二班"];
request.predicate= pre;
// 4.执行请求
NSArray*stus = [_contextexecuteFetchRequest:requesterror:nil];
for(Student*stu
instus)
{
NSLog(@"名字:%@班级:%@",stu.name,stu.classNo.classname);
}
}
2015-10-29 22:09:06.519 CoreData表之间的关联[1817:76617]名字:李四班级:二班
2015-10-29 22:09:06.519 CoreData表之间的关联[1817:76617]名字:李四班级:二班
2015-10-29 22:09:06.519 CoreData表之间的关联[1817:76617]名字:李四班级:二班
【CoreData】表之间的关联的更多相关文章
- PowerDesigner如何设计表之间的关联
PowerDesigner如何设计表之间的关联 步骤/方法 在工具箱中找到参照关系工具: 由地区表到省份表之间拉参照关系,箭头指向父表,然后双击参照关系线,打开参照关系的属性: 在这里检查 ...
- [MySQL数据库之表的约束条件:primary key、auto_increment、not null与default、unique、foreign key:表与表之间建立关联]
[MySQL数据库之表的约束条件:primary key.auto_increment.not null与default.unique.foreign key:表与表之间建立关联] 表的约束条件 约束 ...
- mybatis中表与表之间的关联
第三天 1.mybatis处理表与表之间的关系? 比如要在帖子回复表里显示其它两张相关联表的信息. 处理的第一种方式: 1)主要的数据实体类是ReplyInfo,相关联的实体表的数据是TitleInf ...
- Hibernate中表与表之间的关联多对多,级联保存,级联删除
第一步:创建两个实体类:用户和角色实体类,多对多关系,并让两个实体类之间互相关联: 用户实体类: package com.yinfu.entity; import java.util.HashSet; ...
- SAP 透明表之间的关联字段
VTTK-TPLST=TTDST-TPLST(装运点的关联表及描述表字段TTDST-BEZEI) VTTK-ROUTE=TVROT-ROUTE(装运线路关联表及描述表字段TVROT-BEZEI) VT ...
- Hibernate中表与表之间的关联一对多,级联保存和级联删除
1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...
- CodeFirst 表之间的关联
多重性关系可以是Optional(一个属性可拥有一个单个实例或没有) Required(一个属性必须拥有一个单个实例) Many很多的(一个属性可以拥有一个集合或一个单个实例). Has方法包括如下几 ...
- MySQL创表--分页--自关联--
创建表book create table t_book( id int unsigned auto_increment primary key, bookName varchar(255) defau ...
- mysql中,表与表之间的关系
""" 1.字段的修改.添加.删除 2.多表关系(外键) 3.单表详细操作:增删改,查(各种条件) """ 字段操作 create ta ...
随机推荐
- Hive SQL 监控系统 - Hive Falcon
1.概述 在开发工作当中,提交 Hadoop 任务,任务的运行详情,这是我们所关心的,当业务并不复杂的时候,我们可以使用 Hadoop 提供的命令工具去管理 YARN 中的任务.在编写 Hive SQ ...
- JS实现简易的计算器
JS可以做的事多了,那就用来实现一个计算器吧 看看手机中的计算器,分为普通计算器和科学计算器 自认脑袋不够大,就实现一个普通版本的吧(支持正负数加减乘除等基本连续的运算,未提供括号功能) 看看 ...
- div模拟textarea实现高度自增长
今天突然有位前端的朋友问我textarea怎么实现高度随内容自增长,我一下子懵了,首先想到的是用js改变textarea的高度,但是百度了很多参考代码效果都不是很理想. 因为之前实际项目中用的text ...
- 使用 TOP 限制更新的数据
可以使用 TOP 子句来限制 UPDATE 语句中修改的行数.当 TOP (n) 子句与 UPDATE 一起使用时,将针对随机选择的 n 行执行删除操作.例如,假设您要为一位高级销售人员减轻销售负担, ...
- WCF快速上手
需求:在同一台机子上,有一个B/S程序,和一个C/S程序(不要问为什么,事实就是这样),B/S程序需要主动和C/S程序通信(C/S程序主动与B/S程序通信的情况这里暂不讨论). 下面以最快的速度写一个 ...
- 利用JavaScript函数对字符串进行加密
加密.解密问题对我来说一直是很神秘的,感到神奇无比. 理论了解 前段时间看到关于利用JavaScript函数unescape()和escape()对字符串进行替换处理.通过查资料得知, escape( ...
- jQuery使用经验建议
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以复制并粘贴大部分的代码结构,只要专注最主要的逻辑代码就行了. 使用相同的设计模式和架构也 ...
- 【Java每日一题】20161018
20161017问题解析请点击今日问题下方的"[Java每日一题]20161018"查看 package Oct2016; public class Ques1018 { publ ...
- 我整理的PHP 7.0主要新特性
原文:http://php.net/manual/en/migration70.new-features.php 1.标量参数类型声明 现在支持字符串(string).整型(int).浮点数(floa ...
- Get,Post请求中文乱码问题有效解决方法
本文主要介绍如何有效解决web请求中的乱码问题,其实解决方法有很多种,不同的请求类型解决方法也不相同. 本文只介绍最方便的一种: 1.先修改jsp中的编码方式 2.针对Post方式提交的请求如果出现乱 ...