2014-02-25 64 views
0

我想學習如何使用核心數據,但我被困在創建兩個實體之間的關係,我不知道我是否以錯誤的角度看這個,但基本上,我有兩個實體:「Listas」和「Tarefas」。在我的xcdatamodeld中,我創建了一個對象之間的一對多關係,我只是不知道如何在添加「Tarefa」時設置正確的關係。使用核心數據創建一個實體關係

我的問題更加清晰,這裏是什麼,我有一個形象:

Core Data Relation

當添加一個「Tarefas」,反對我如何關聯的,與通過「Listas」的對象?

謝謝!

+0

嘗試爲對象使用更好的命名約定。使用單數來命名實體,例如Lista,Tarefa(我不知道這些名稱是否與Listas具有相同的含義?)。然後以類似的方式爲您的關係命名,例如Lista.tarefas(To-Many),Tarefa.lista(To-One)。沒有必要調用關係listaTarefas(這已經很明顯,因爲它是Lista的一個屬性)。現在,當您創建新的Tarefa'newTarefa'時,只需設置newTarefa.lista = lista,假設lista是傳遞的對象。你不需要設置反比關係。 –

+0

當然,這假定你爲你的實體創建NSManagedObject子類。 –

+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也獲得了一個新值。

+0

非常感謝您提供清晰詳盡的解釋。 –

1

你可以去:

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

它會更容易不打電話給你的實體複數形式(而不是Listas稱之爲Lista)。你的代碼會更有意義。
正如@TomHarrington所提到的,您的反比關係將會自動保持。

+0

感謝您的回答。 –

0

我想,人們會在以後的SE這一點,所以爲了以防萬一,這是過濾基於兩個對象之間的關係數據的代碼。

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

self.currentListas是segue傳遞的Lista對象。

相關問題