Iphone 当关系可能阻止核心数据对象被删除时,我如何确定它是否可以被删除?

Iphone 当关系可能阻止核心数据对象被删除时,我如何确定它是否可以被删除?,iphone,ios,core-data,Iphone,Ios,Core Data,假设我有一个员工数据库,其中一个员工可以是一个部门的经理。部门的经理关系(与担任经理角色的员工)不是可选的。因此,我不能删除某个部门经理的员工 在myUITableViewDelegate中,我希望: -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return [self

假设我有一个员工数据库,其中一个员工可以是一个部门的经理。部门的经理关系(与担任经理角色的员工)不是可选的。因此,我不能删除某个部门经理的员工

在my
UITableViewDelegate
中,我希望:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView
          editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return [self mayDeleteTableView:tableView entryAtIndexPath:indexPath] ?
            UITableViewCellEditingStyleDelete : UITableViewCellEditingStyleNone;
}
其中
mayDeleteTableView:entryAtIndexPath
在员工是部门经理时返回
NO
,否则返回
YES

现在,我当然可以通过设置一个fetch请求来实现这个方法,该请求告诉我我想要什么。但我只是想知道是否有比这更简单的方法,因为核心数据必须有某种机制来准确地发现这一点,否则当我删除一个我不应该删除的对象时,它不会引发错误

所以我的问题是:“核心数据是否以某种方式为我提供了
mayDeleteTableView:entryAtIndexPath
的实现?”


更新:好的,实际上我现在找到了
NSManagedObject:validateForDelete
方法。它似乎总是返回
NO
。因此,我现在的问题是:“我是否必须实现
validateForDelete
,或者这应该为我做正确的验证(在这种情况下,我做了其他错误的事情)?”

如果您将manager属性设置为BOOL或类似的东西,您可以对照它检查tableView。通过tableView获取对员工的引用后,可以使用一些简单的方法,例如

return [[[fetchController objectAtIndexPath:indexPath] manager] boolValue] ? UITableViewCellEditingStyleNone : UITableViewCellEditingStyleDelete;

在这里,我假设您通过NSFetchResultsController获取核心数据对象,但无论您如何收集它,这都应该是相同的逻辑。我希望这有帮助

好吧,听起来很合理。如果我将employee的“managesDepartment”设置为与部门的“manager”关系相反的关系,我可以检查该关系是否为空。谢谢,没问题。很高兴为您提供帮助实际上,为每位员工设置BOOL属性
isManager
可能是一个更好的主意。我之所以这样说,是因为在保存managedObjectContext时,
nil
值往往会使系统崩溃。因此,如果设置BOOL属性,您将始终具有
YES
NO
,因此保存上下文将是安全的。这也应该允许您在我的回答中使用上面的代码,而不是通过
validateForDelete:
method。好吧,似乎validateForDelete不起作用。我发现它也不打算用于此用途。好吧,我做错了别的事。事实上,使用
validateForDelete
似乎是完美的。如果
validateForDelete:
返回NO,那么它应该会附带一个相关的错误,说明原因。错误说明了什么?