Objective c 利用关系理解CoreData

Objective c 利用关系理解CoreData,objective-c,sqlite,core-data,entity-relationship,Objective C,Sqlite,Core Data,Entity Relationship,我对使用核心数据和关系产生了误解 我从sql时代(很久以前…)记得的是,我必须向每个表添加和ID,这些表将成为表之间建立关系的条目 下面是我的表在myCoreData(实体)中的外观概述 Epro\u表是我的主表,其他表必须与该表相关 我想做的是: 用户在UIViewController(EPro公司视图控制器)上填写字段,该控制器有自己的实体EPro公司 然后,当他按下下一步(即创建EPro_工作表)时,增加idSheet并填充其他条目,而且EPro_公司将填充EPro_公司视图控制器的字段

我对使用核心数据和关系产生了误解

我从sql时代(很久以前…)记得的是,我必须向每个表添加和ID,这些表将成为表之间建立关系的条目

下面是我的表在my
CoreData
(实体)中的外观概述

Epro\u表
是我的主表,其他表必须与该表相关

我想做的是:

  • 用户在UIViewController(
    EPro公司视图控制器
    )上填写字段,该控制器有自己的实体
    EPro公司
  • 然后,当他按下下一步(即创建
    EPro_工作表
    )时,增加idSheet并填充其他条目,而且
    EPro_公司
    将填充EPro_公司视图控制器的字段文本
  • 然后用户将填写
    EPro\u DaFroidViewController
    的字段,然后当他按下next时,填写实体EPro\u DaFroid,获取当前EPro\u表的当前Id并将其设置为EPro\u DaFroid
  • 等等
  • 将有一个UIViewController(历史记录),允许用户检索特定日期的所有信息以编辑或显示它
你能帮我做这件事吗?关系还是根本没有关系。。。如果存在关系,我如何使用nspredicate格式检索信息,如:检索日期@“…”的所有信息

非常感谢你的帮助


首先,您必须了解核心数据不是关系数据库,主键等概念并不存在。它留给你去实现。有关这方面的更多详细信息,请参见:

这里呢

如果要在核心数据中实现关系,则必须在核心数据模型中创建关系。假设你有这样的关系:

学生>部分

i、 一个学生属于一个部门,一个部门可以有许多学生。然后,在核心数据模型中,您可以定义学生与部分之间的一对一关系(例如
oneSection
),以及部分与学生之间的一对多关系(例如
manyStudents
)。然后你将这个关系设置为彼此的反向关系

尽管我们将其声明为关系,但它实际上是托管对象的一个属性

因此,如果您有一个名为
studObj1
studObj2
Student
实体)的托管对象,那么您可以将这种关系设置为一个section对象(
sectionObj
):

(假设您将创建一个托管对象子类)


你的具体问题是什么?是的。正如MVP所说,简短明了地解释你的问题,只有你才能得到快速的回答。
Student *studObj1= <create object>
Student *studObj2= <create object>

Section *sectionObj = <create object>

//set one-to-one relationship
studObj1.oneSection = sectionObj;
studObj2.oneSection = sectionObj;

//set one-to-many relationship;

NSSet *studSet = [NSSet setWithObjects:studObj1,studObj2,nil];
sectionObj.manyStudents = studSet;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"oneSection.name like 'MainSection'"];