簡體   English   中英

核心數據一對多關系

[英]Core data one to many relationship

我有一個場景,其中有一個實體可以有X個項目,具體取決於用戶添加的內容。我有另一個實體需要與任意數量的第一個實體建立關系。 這很容易,只需創建從第二個實體到第一個實體的一對多關系。

我遇到的問題是,如果第二個實體可以采用第一個實體的多個數字怎么辦? 我不知道該怎么做。

示例:實體A包含:x,y,z實體B可以包含(例如):x中的3和y中的7。 或者8個x,7個y,2個z。 全部取決於用戶在應用中選擇的內容。

CoreData不允許您建模(直接)關系,您可以將同一個對象多次添加到多對多關系中。

在您的情況下,您有兩個我能想到的選項,它們都要求您建模一個新的中間件關系實體。

假設您有實體AB 您現在需要創建一個實體AtoB ,其中AtoB結構是:

關系:
一個:對一關系到A實體B:對一關系到B實體

  1. 第一個選項將允許您在屬性bCount手動保留您喜歡的對象B的計數:
    1. 每次用戶鏈接AB您將增加現有關系的計數或使用正確的值創建新的AtoB對象(注意重復)
  2. 第二個選項是讓用戶在A實體鏈接到B實體時添加盡可能多的AtoB關系(無唯一性):
    1. 需要時手動或通過分組獲取這些項目的計數

在大多數情況下,我更喜歡第一種選擇。

A實體和B實體將與AtoB實體具有多對多關系。

你可以保持從BA的多對多關系,因為我確信它有其目的。

多對多的示例

在此示例中,有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM