如何从Filtered UITableView中删除项目,而不实际删除它?

时间:2013-03-29 08:44:20

标签: ios objective-c uitableview core-data

我有一个UITableView,它从FetchedResultsController获取一个Core Data对象数组。 我希望能够使用标准删除按钮从表视图中删除一个对象,并让tableview单元格像删除项目时一样淡出,但在我的情况下我不是实际上删除对象但将其标记为已删除。例如/我有一个名为deleted的属性,因此它仍然存在,但似乎已删除;

obj.deleted = [NSNumber numberWithBool:YES];

有没有这样做的方法,所以它似乎仍然按标准删除工作?

我似乎无法在不调用[self.tableView reloadData]的情况下这样做,所以我放弃了标准删除带来的漂亮动画。

我的tableView获取结果控制器有一个过滤器,因此tableView中的数据被过滤;

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"deleted == %@", [NSNumber numberWithBool:NO];

怀疑我需要的代码会在这里;

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //
    }
}

1 个答案:

答案 0 :(得分:2)

NSManagedObject已有方法isDeleted,因此自定义属性deleted可能会干扰该方法。您可以向实体添加属性invisible并检查

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"invisible == %@", [NSNumber numberWithBool:NO];

在获取的结果控制器中。如果你设置

obj.invisible = [NSNumber numberWithBool:YES];

应该从表视图中删除该对象。 (您可能需要保存上下文,我现在不是100%确定。)