我想學習如何使用核心數據,但我被困在創建兩個實體之間的關係,我不知道我是否以錯誤的角度看這個,但基本上,我有兩個實體:「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子類。 –
感謝您的提示。 –