假设我有一个员工数据库,员工可以成为部门经理。部门(与经理角色的员工)的经理关系不是可选的。因此,当他担任一名部门经理时,我无法删除该员工。
在我的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
或者是否应该为我做正确的验证(在这种情况下我做错了其他事情)?”
答案 0 :(得分:0)
如果将manager属性设置为BOOL或类似的东西,则可以检查tableView。通过tableView获取对员工的引用后,可以使用简单的内容,例如
return [[[fetchController objectAtIndexPath:indexPath] manager] boolValue] ? UITableViewCellEditingStyleNone : UITableViewCellEditingStyleDelete;
这里我假设您通过NSFetchResultsController获取核心数据对象,但无论您如何收集它,这应该是相同的逻辑。我希望这有帮助