2012-09-24 118 views
0

我有一個NSArrayController子類,它設置一個新插入的對象的實例變量,並防止用戶刪除它,如果此變量爲零。防止刪除核心數據NSManagedObject

我想在一個實體子類中做到這一點。在awakeFromInsert方法中設置變量是可能的。有沒有一種辦法,以防止刪除,排序的:

if (self.testVariable == 0) return; ? 

我沒有找到它,但也許我錯過了什麼。

回答

1

在NSManagedObject實現此:

- (BOOL)validateForDelete:(NSError **)error 
+0

是的,您的實現必須反映你的情況 – mprivat

+0

你的意思是:(BOOL)validateForDelete:(!self.testVariable = 0)(NSError **)錯誤{ 回報; } ?? – berfis

1

根據一些測試,我相信validateForDelete將無法​​正常工作,防止刪除,因爲所需。

validateForDelete用於執行添加驗證之前刪除。本質上,方法名稱是誤導性的。例如,對於

此外,prepareForDelete之前被調用並將刪除任何Cascade關係,並標記null任何Nullify的關係。因此,必須「退出」。或者改變你的數據模型,只允許Deny這些將在prepareForDelete中單獨留下這些關係。這是一個僵硬的反手應用到你的商業模式和邏輯。

此外,Deny關係在用戶保存數據時被「拒絕」 - 這對用戶來說可能太遲了,無法恢復和糾正這種情況。

我相信最好的選擇是禁用綁定到控制器中的canRemove方法的移除按鈕。

Some solid opinions Some possible solutions at SO