2012-09-24 119 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