你很容易混淆刪除一個對象並將其從關係中刪除。
首先,檢查你的關係,刪除規則:
如果刪除規則是「廢除」,那麼這意味着你可以刪除從關係的對象,但不刪除的對象。在這種情況下,這聽起來像你想要的:你希望能夠從具有特定筆記的關係中移除標籤,而不會影響使用該標籤的所有其他筆記。
關於實際修改與您的新標記集的關係,您可以執行兩項操作。第一種方法就像你剛纔提到的那樣,只是從註釋中刪除所有標籤並重新添加它們。實際上這是一個很好的計劃。當您添加標籤時,當然,對於每個標籤,您需要先檢查它是否存在,如果存在,請將現有標籤添加到關係中。
僞代碼:
- 從當前記事中刪除所有的標籤。
- 製作一個可變集合,以保存要添加的集合。
- 獲取新的字符串數組爲鏈接的標籤
- 對於每一個標籤的字符串,請執行下列操作:
- 創建一個謂語找到具有該名稱的標籤對象。創建一個提取請求,並執行它。
- 查看結果:如果存在返回的標記(即結果數組中有> 0個對象),請將其添加到您的可變集中。
- 如果沒有返回的標籤(即沒有該名稱的標籤),則創建一個新的標籤對象。添加到你的可變集。
- 將Note的
tags
屬性設置爲新的一組標籤。
執行此操作的替代方法可讓您從關係中逐個添加和刪除標籤,即致電NSMutableSet *mySet = [yourNote mutableSetValueForKey:@"tags"]
。這會返回一組可變的標記對象,並且您對該集所做的任何更改都會被Core Data自動查看。因此,您可以從中刪除一個對象,然後該對象將不再處於關係中,或者可以向該集添加另一個標記,並且該對象將與該筆記相關。
在任何時候,我們都從數據庫中刪除了一個對象。您的所有標籤仍然存在,我們只是更改哪些與哪些筆記相關。