2012-05-25 67 views
1

在我的CoreData數據模型中,有一個Note實體和一個Tag實體,它們有多對多的關係,所以每個Note都可以有很多標籤,每個Tag可以屬於很多Notes。CoreData:刪除多對多關係中的實體

標籤被輸入爲以逗號分隔字符串: 貓,狗,豬

然後我分割字符串「貓」,「狗」,「豬」

想,如果我有一個注意標籤'貓','狗','豬',我刪除'豬',並添加'鳥',起初我有一個字符串: 「貓,狗,鳥」,然後'貓','狗' ,'bird',

現在我該怎麼辦?我應該刪除此註釋的所有標籤並重新添加所有標籤嗎?但是,一旦我刪除了所有標籤,其他Notes共享相同的標籤會丟失這些標籤嗎?

謝謝!

回答

3

你很容易混淆刪除一個對象並將其從關係中刪除。

首先,檢查你的關係,刪除規則:

delete rule

如果刪除規則是「廢除」,那麼這意味着你可以刪除從關係的對象,但不刪除的對象。在這種情況下,這聽起來像你想要的:你希望能夠從具有特定筆記的關係中移除標籤,而不會影響使用該標籤的所有其他筆記。

關於實際修改與您的新標記集的關係,您可以執行兩項操作。第一種方法就像你剛纔提到的那樣,只是從註釋中刪除所有標籤並重新添加它們。實際上這是一個很好的計劃。當您添加標籤時,當然,對於每個標籤,您需要先檢查它是否存在,如果存在,請將現有標籤添加到關係中。

僞代碼:

  1. 從當前記事中刪除所有的標籤。
  2. 製作一個可變集合,以保存要添加的集合。
  3. 獲取新的字符串數組爲鏈接的標籤
  4. 對於每一個標籤的字符串,請執行下列操作:
    1. 創建一個謂語找到具有該名稱的標籤對象。創建一個提取請求,並執行它。
    2. 查看結果:如果存在返回的標記(即結果數組中有> 0個對象),請將其添加到您的可變集中。
    3. 如果沒有返回的標籤(即沒有該名稱的標籤),則創建一個新的標籤對象。添加到你的可變集。
  5. 將Note的tags屬性設置爲新的一組標籤。

執行此操作的替代方法可讓您從關係中逐個添加和刪除標籤,即致電NSMutableSet *mySet = [yourNote mutableSetValueForKey:@"tags"]。這會返回一組可變的標記對象,並且您對該集所做的任何更改都會被Core Data自動查看。因此,您可以從中刪除一個對象,然後該對象將不再處於關係中,或者可以向該集添加另一個標記,並且該對象將與該筆記相關。

在任何時候,我們都從數據庫中刪除了一個對象。您的所有標籤仍然存在,我們只是更改哪些與哪些筆記相關。

相關問題