我正在努力学习如何使用核心数据,但我不得不在两个实体之间创建关系,我不知道我是否以错误的角度看待这个,但基本上,我有两个实体:“ Listas“和”Tarefas“。在我的xcdatamodeld中,我创建了一个对象之间的一对多关系,我只是不知道在添加“Tarefa”时如何设置正确的关系。
我的问题更清楚,这是我所拥有的图像:
添加“Tarefas”时,对象如何与传递的“Listas”对象相关联?
谢谢!
答案 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对象。