0

我对使用CoreDatarelationship有误解。

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

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

Epro_Sheet是我的主表,其他的必须与那个有关。

我想做的是:

  • EPro_CompanyViewController用户在具有自己的实体的 UIViewController () 上填写字段EPro_Company
  • 然后,当他按下下一步时——创建EPro_Sheet、增加 idSheet 并填充其他条目——此外,这些条目还EPro_Company填充了 EPro_CompanyViewController 的字段文本。
  • 然后用户将填写 的字段EPro_DaFroidViewController,然后当他按下下一步时,它会填充实体 EPro_DaFroid 获取当前 EPro_Sheet 的当前 Id 并将其设置为 EPro_DaFroid ...
  • ETC....
  • 将有一个 UIViewController ( History ) 允许用户检索特定日期的所有信息以对其进行编辑或显示。

你能帮我看看怎么做吗?关系或根本没有关系...如果存在关系,我如何使用 NSPredicateFormat 检索信息,例如:从日期@“...”检索我所有信息;

非常感谢您的帮助!

在此处输入图像描述

4

1 回答 1

1

首先,您必须了解 core-data 不是关系数据库,并且不存在主键等概念。它留给你实施。可以在此处找到更多详细信息:

核心数据与 RDBMS

和这里

核心数据和数据库之间的区别

如果您想在核心数据中实现关系,则必须在核心数据模型中创建关系。想象一下你有这样的关系:

学生 <->> 部分

即一个学生属于一个部门,一个部门可以有很多学生。然后在您的核心数据模型中,您可以定义oneSection从 Student 到 Section 的一对一关系(比如manyStudents)和从 Section 到 Student 的另一个关系(比如 ),这是一对多的。然后你将关系设置为彼此的逆关系。

尽管我们将其声明为关系,但它几乎充当托管对象的属性。

因此,如果您有一个名为studObj1and studObj2( StudentEntity) 的托管对象,那么您可以将这样的关系设置为节对象 ( sectionObj):

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

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'"];
于 2013-03-21T11:09:02.577 回答