[英]Core data one to many relationship
我有一個場景,其中有一個實體可以有X個項目,具體取決於用戶添加的內容。我有另一個實體需要與任意數量的第一個實體建立關系。 這很容易,只需創建從第二個實體到第一個實體的一對多關系。
我遇到的問題是,如果第二個實體可以采用第一個實體的多個數字怎么辦? 我不知道該怎么做。
示例:實體A包含:x,y,z實體B可以包含(例如):x中的3和y中的7。 或者8個x,7個y,2個z。 全部取決於用戶在應用中選擇的內容。
CoreData不允許您建模(直接)關系,您可以將同一個對象多次添加到多對多關系中。
在您的情況下,您有兩個我能想到的選項,它們都要求您建模一個新的中間件關系實體。
假設您有實體A
和B
您現在需要創建一個實體AtoB
,其中AtoB
結構是:
關系:
一個:對一關系到A
實體B:對一關系到B
實體
bCount
手動保留您喜歡的對象B
的計數: A
到B
您將增加現有關系的計數或使用正確的值創建新的AtoB
對象(注意重復) A
實體鏈接到B
實體時添加盡可能多的AtoB
關系(無唯一性): 在大多數情況下,我更喜歡第一種選擇。
A
實體和B
實體將與AtoB
實體具有多對多關系。
你可以保持從B
到A
的多對多關系,因為我確信它有其目的。
在此示例中,有一個User實體可以有多個列表,但列表也可以有多個用戶。 然后列表也有任務,但這些任務也可以是多個列表的一部分。
例如
用戶: 1。Jeff 2. Rose
列表: 1。購物2.家庭作業3.家務
任務: 1,2,3,4,5。
〔實施例
Rose -> Shopping -> Task 1, Task 3, Task 4
-> Chores -> Task 2, Task 4
Jeff -> Homework -> Task 3, Task 5
-> Chores -> Task 2, Task 4
編輯
這就是您如何顯示有關用戶及其數據的不同信息。
// Fetch user
User *user = [self getUserWithName:@"Rose"];
// Loop through lists
for (List *listObject in [user lists])
{
// PRINT: (List Name) : (# of Tasks)
NSLog(@"%@ : %lu", [listObject listName], (unsigned int)[[listObject tasks] count]);
}
例如,這將打印以下輸出,因為我們為示例提供了數據。
Shopping : 4
Chores : 2
編輯2:
如果您在實體用戶和任務下創建userId字段並為每個用戶創建userId,那么您可以使用與上面相同的模型,僅使用簡單的NSPredicate,根據用戶過濾掉任務。
[NSPredicate predicateWithFormat:@"userId == %@", @"123456789"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.