【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 ...
随机推荐
- rsync密码使用要注意的几个点
1 客户端和服务端的密码文件不一样 服务端的密码文件格式是: 用户名:密码 比如: yejianfeng:123456 客户端的密码文件格式是: 密码: 比如 123456 所以如果一个机器即 ...
- 用SQL语句查找包含有某个关键字的存储过程、触发器、函数等(仅适用MS SQL SERVER)
第一种方法:利用系统表进行查询 --将text替换成你要查找的内容 select name from sysobjects o, syscomments s where o.id = s.i ...
- Ionic2学习笔记(1):新建一个页面
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5532323.html 新建一个页面: 借上一篇中的HelloWorl ...
- QWebView在 Qt 5.x中编译出错:File not found: main.obj
错误现象 近日由于项目需要,想要学习一下QWebView的使用.于是简单的建立了一个Qt工程,并编写了如下代码: #include <QApplication> #include < ...
- 页面置换算法 - FIFO、LFU、LRU
缓存算法(页面置换算法)-FIFO. LFU. LRU 在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO. LFU ...
- Asp.net Mvc模块化开发之分区扩展框架
对于一个企业级项目开发,模块化是非常重要的. 默认Mvc框架的AreaRegistration对模块化开发真的支持很好吗?真的有很多复杂系统在使用默认的分区开发的吗?我相信大部分asp.net的技术团 ...
- 我的css笔记
1.css的使用方法 内嵌样式 <p style="font-size:20pt;color:red;">这个Style定义<p> <!--里面的文字 ...
- C# Winform反序列化复杂json字符串
最近接的私单是一个CS项目,里面所有的操作都是通过调用API接口来进行的. 接口详细说明 协议:https 请求方式:post https://xx.xxx.net/app/clients 提交j ...
- Jconsole远程监控tomcat 的JVM内存(linux、windows)
Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远程的JVM,对运行在java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界 ...
- 不简单的SQL查询和排序语句
真不简单!! 一:使用select语句进行查询 语法: SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] [OR ...