【问题标题】:How do i delete an item from a Filtered UITableView, without actually deleting it?如何从过滤的 UITableView 中删除一个项目,而不实际删除它?
【发布时间】:2013-03-29 08:44:19
【问题描述】:

我有一个 UITableView,它从 FetchedResultsController 获取一组核心数据对象。 我希望能够使用标准删除按钮从表格视图中删除一个对象,并让表格视图单元格像删除项目时通常那样淡出,但是在我的情况下我不是实际上删除对象但将其标记为已删除。 eg/我有一个属性叫做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) {
        //
    }
}

【问题讨论】:

  • “在核心数据中将其标记为已删除”和“因此它似乎仍然按照标准删除工作”是什么意思?
  • 抱歉,很难解释。我有一个名为 deleted 的 BOOL 属性,我想将其设置为obj.deleted = [NSNumber numberWithBool:YES];,因此获取的结果控制器不会获取它。希望这是有道理的。

标签: ios objective-c uitableview core-data


【解决方案1】:

NSManagedObject 已经有一个方法isDeleted,所以自定义属性deleted 可能会干扰该方法。您可以将属性 invisible 添加到您的实体并检查

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

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

obj.invisible = [NSNumber numberWithBool:YES];

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

【讨论】:

  • 成功了。甚至不必保存上下文。刚刚分配了obj.invisible = [NSNumber numberWithBool:YES]; 并淡出,就好像它正在被删除一样。谢谢
猜你喜欢
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 2022-01-24
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多