如何在关系可以阻止时删除核心数据对象?

时间:2011-06-07 12:36:04

标签: iphone ios core-data

假设我有一个员工数据库,员工可以成为部门经理。部门(与经理角色的员工)的经理关系不是可选的。因此,当他担任一名部门经理时,我无法删除该员工。

在我的UITableViewDelegate我希望:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView
          editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return [self mayDeleteTableView:tableView entryAtIndexPath:indexPath] ?
            UITableViewCellEditingStyleDelete : UITableViewCellEditingStyleNone;
}

当员工是部门经理时,mayDeleteTableView:entryAtIndexPath返回NO,否则YES

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

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

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

1 个答案:

答案 0 :(得分:0)

如果将manager属性设置为BOOL或类似的东西,则可以检查tableView。通过tableView获取对员工的引用后,可以使用简单的内容,例如

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

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