我想学习如何使用核心数据,但我被困在创建两个实体之间的关系,我不知道我是否以错误的角度看这个,但基本上,我有两个实体:“Listas”和“Tarefas”。在我的xcdatamodeld中,我创建了一个对象之间的一对多关系,我只是不知道如何在添加“Tarefa”时设置正确的关系。使用核心数据创建一个实体关系
我的问题更加清晰,这里是什么,我有一个形象:
当添加一个“Tarefas”,反对我如何关联的,与通过“Listas”的对象?
谢谢!
我想学习如何使用核心数据,但我被困在创建两个实体之间的关系,我不知道我是否以错误的角度看这个,但基本上,我有两个实体:“Listas”和“Tarefas”。在我的xcdatamodeld中,我创建了一个对象之间的一对多关系,我只是不知道如何在添加“Tarefa”时设置正确的关系。使用核心数据创建一个实体关系
我的问题更加清晰,这里是什么,我有一个形象:
当添加一个“Tarefas”,反对我如何关联的,与通过“Listas”的对象?
谢谢!
它的工作原理与任何其他对象属性。
如果没有定制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
也获得了一个新值。
非常感谢您提供清晰详尽的解释。 –
你可以去:
Listas* l = //Your passed Listas
Terafas* t = //create your new Terafas
t.terafaLista = l;
它会更容易不打电话给你的实体复数形式(而不是Listas
称之为Lista
)。你的代码会更有意义。
正如@TomHarrington所提到的,您的反比关系将会自动保持。
感谢您的回答。 –
我想,人们会在以后的SE这一点,所以为了以防万一,这是过滤基于两个对象之间的关系数据的代码。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", self.currentListas.listaTarefa];
[fetchRequest setPredicate:predicate];
self.currentListas是segue传递的Lista对象。
尝试为对象使用更好的命名约定。使用单数来命名实体,例如Lista,Tarefa(我不知道这些名称是否与Listas具有相同的含义?)。然后以类似的方式为您的关系命名,例如Lista.tarefas(To-Many),Tarefa.lista(To-One)。没有必要调用关系listaTarefas(这已经很明显,因为它是Lista的一个属性)。现在,当您创建新的Tarefa'newTarefa'时,只需设置newTarefa.lista = lista,假设lista是传递的对象。你不需要设置反比关系。 –
当然,这假定你为你的实体创建NSManagedObject子类。 –
感谢您的提示。 –