2012-09-27 50 views
1

我目前有兩個實體,一個類別實體和一個項目實體,其中Category:Item爲1:m。使用「無動作」刪除規則並使用prepareForDeletion代替

我已將「無操作」規則應用於類別 - >項目關係,並實施了Category.prepareForDeletion以在刪除類別之前將類別中的所有項目移至特殊的全部捕獲類別(catch-all類別不可刪除)。

- (void)prepareForDeletion { 
    Category *misc = [Database theMiscCategory]; 
    [misc addItems:self.items]; 
    [super prepareForDeletion]; 
} 

我的問題是這樣的:我錯過了什麼嗎?如果不是,我該如何關閉XCode關於「無動作」作爲高級功能的警告?

FTR,我沒有使用nullify,因爲它更便於應用程序的其他區域將某些東西轉儲到「misc」類別中,而不是處理具有空類別的項目。我確實嘗試過,但得到了一些意想不到的行爲 - 如果我把這個調用放在超級第一位,那麼在我可以收集要改變的一組項目之前,關係是無效的,如果我把它放在那之後,無效。我想我可以收集他們,然後調用超級,然後設置新的類別,但似乎klunky。

所以我認爲「沒有行動」是我想要的,只是想確保我不會錯過任何我應該在prepareForDeletion中管理的東西。

回答

0

因此,在閱讀&泡泡時間之間,答案似乎很簡單:是的,如果您有理由使用「無效」,那麼您需要做的就是恰當地實施prepareForDeletion以保持參照完整性。

0

「無動作」產生警告的原因是管理CategoryItem之間的關係現在由您決定。

所以,如果你有一個名爲CategorymyCategorymyCategory.items 5點的對象,並且刪除myCategory,5個Item對象仍然會認爲他們有哪些已被刪除與myCategory的關係。

您最好的選擇是將規則改回「Nullify」,讓核心數據爲您處理關係管理。你仍然可以在prepareForDeletion中做你正在做的事情,因爲self.items此時仍包含Item對象。

如果你必須保持「不採取行動」的規則對於其他一些原因,你需要確保在self.items每個Item期間得到prepareForDeletion.category屬性設置爲零。

+0

謝謝克里斯。我確實嘗試過,但得到了一些意想不到的行爲 - 如果我把這個調用放在超級第一位,那麼在我可以收集要改變的一組項目之前,關係是無效的,如果我把它放在那之後,無效。我想我可以收集他們,然後調用超級,然後設置新的類別,但似乎klunky。我確實認爲「沒有行動」是我想要的,只是想確保我沒有失去任何東西。 – Sasha