我使用 CoreData 和关系误解了。
我记得从我的sql的时间(很久以前......)我必须添加 ID 到每个表格,这将是条目这使表之间的关系。
在我的CoreData
(实体)中我的表格的概述下面。
Epro_Sheet
是我的主表,其他人必须与那个相关。
我想做的是:
EPro_CompanyViewController
EPro_Company
)上的字段
EPro_Sheet
,增加idSheet并填充其他条目 - 而且EPro_Company
填充了EPro_CompanyViewController的字段文本。EPro_DaFroidViewController
的字段,然后当他按下它时填充实体EPro_DaFroid获取当前EPro_Sheet的当前ID并将其设置为EPro_DaFroid ...... 你能帮我解决怎么做的事吗?关系或根本没有...如果有关系我怎样才能使用NSPredicateFormat检索信息:从@"日期中检索我的所有信息....&#34 ;;
非常感谢你的帮助!
答案 0 :(得分:1)
首先,您必须了解核心数据不是关系数据库,主键等概念不存在。它留给你实施。有关这方面的更多详情,请访问:
在这里
The differences between Core Data and a Database
如果您想在核心数据中实现关系,则必须在核心数据模型中创建关系。想象一下,你有这样的关系:
学生< - >>节
即一个学生属于一个部分,一个部分可以有许多学生。然后在您的核心数据模型中,您可以定义从一个对一的学生到一个部分的一个关系(比如oneSection
)和另一个关系(比如manyStudents
),从一个部分到另一个部分 - 太多。然后将关系设置为彼此的反比关系。
虽然我们将此声明为关系,但它几乎充当托管对象的属性。
因此,如果您有一个名为studObj1
和studObj2
(Student
实体)的托管对象,那么您可以将这样的关系设置为一个section对象(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'"];