使用核心数据创建实体关系

时间:2014-02-25 21:16:44

标签: ios core-data

我正在努力学习如何使用核心数据,但我不得不在两个实体之间创建关系,我不知道我是否以错误的角度看待这个,但基本上,我有两个实体:“ Listas“和”Tarefas“。在我的xcdatamodeld中,我创建了一个对象之间的一对多关系,我只是不知道在添加“Tarefa”时如何设置正确的关系。

我的问题更清楚,这是我所拥有的图像:

Core Data Relation

添加“Tarefas”时,对象如何与传递的“Listas”对象相关联?

谢谢!

3 个答案:

答案 0 :(得分:3)

它的工作原理与任何其他对象属性相同。

如果您拥有自定义NSManagedObject子类,

Listas *myListas = // passed in
Tarefas *newTarefas = [NSEntityDescription insertNewObjectForEntityForName:@"Tarefas" inManagedObjectContext:myManagedObjectContext];
[newTarefas setValue:myListas forKey:@"tarefaLista"];

如果您执行拥有自定义NSManagedObject子类,

Listas *myListas = // passed in
Tarefas *newTarefas = [NSEntityDescription insertNewObjectForEntityForName:@"Tarefas" inManagedObjectContext:myManagedObjectContext];
[newTarefas setTarefaLista:myListas];

请记住,由于您已正确配置了反向关系,因此您只需在关系的一侧进行分配。核心数据将确保另一方也设置。如上所述,我只为tarefaList设置了一个值,但listaTarefa也获得了一个新值。

答案 1 :(得分:1)

你可以去:

Listas* l = //Your passed Listas
Terafas* t = //create your new Terafas
t.terafaLista = l;

更容易不以复数格式调用您的实体(而不是Listas将其称为Lista)。你的代码会更有意义。
正如@TomHarrington所提到的,你的反向关系会自动维持。

答案 2 :(得分:0)

我想人们将来会这样做,以防万一,这是根据两个对象之间的关系过滤数据的代码。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", self.currentListas.listaTarefa];
    [fetchRequest setPredicate:predicate];

self.currentListas是segue传递的Lista对象。