【问题标题】:iOS Delete Row from Tableview without deleting Core DataiOS 从 Tableview 中删除行而不删除核心数据
【发布时间】:2015-02-18 04:38:23
【问题描述】:

我有一个嵌入在视图控制器中的表格视图,其中填充了核心数据结果。显示的核心数据可通过选择一行进行编辑,并且与其他核心数据实体相关。

我想从我的表格视图中删除一行而不删除对象

这似乎相当简单,但似乎没有任何明显的答案。

我尝试使用第二个谓词[NSPredicate predicateWithFormat: @"shouldDisplay = YES"];,它是BOOL,当更改我希望删除的对象的值时,在- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 方法中设置为NO,但这会导致错误,因为@ 987654327@ 不是有效的密钥路径(我过去从未遇到过这个问题)。我从 question 得到了这个建议,这是我在堆栈上找到的唯一相关链接。

有没有一种简单的方法可以从表中删除一行,无论是简单地排除表中的数据,还是实际删除一行,而不永久删除对应的数据?

编辑

这是我读过的最常见的建议:

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade];

这对我杀死应用程序不起作用并给出了这个原因:

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新(1)后现有节中包含的行数必须等于行数更新前包含在该节中 (1),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该节的行数(0 移入, 0 移出)。

更新

要查看我的代码以了解我如何填充我的 tableview 以及哪些工作/不工作,请参阅此 PASTE BIN LINK。我没有使用数组填充。

致谢

我试图在谓词中使用 BOOL,而 在我的实体属性中没有 BOOL "shouldDisplay"。谓词无法通过在属性中搜索类中声明的内容来工作。这是一个菜鸟错误。

【问题讨论】:

  • 将获取的结果数组设为全局并从结果数组中移除对象并重新加载表格视图
  • @Rose 将所有结果放入数组然后再次过滤似乎还有很长的路要走。如果这是唯一的选择,我将不得不尝试。
  • 另一种方法是删除uitableview的行
  • @SASmith np 谓词的事情应该是一个好的解决方法,希望你能找到为什么它不起作用。唯一的其他选择(尽管是半危险的)是,即使您没有在上下文中调用 save ,当您在核心数据中删除和对象时,表数据也会更新。那里可能有一个工作,您使用不同的上下文并且永远不要调用 save 。祝你好运,希望你能找到答案。
  • 你的对象有那个keyPath吗?您在核心数据模型中添加了“shouldDisplay”吗?

标签: ios objective-c uitableview core-data


【解决方案1】:

如果您只想删除下面的单元格。

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade];

如果您也想删除对象,请添加以下语句。

[yourObjectArray removeObjectAtIndex:indexPath.row];

注意:

如果您重新加载表,删除该行后,您将再次看到该行,因为您尚未从数组中删除该特定对象。

【讨论】:

  • 我已经尝试过了,但正如问题中所述,我正在使用和恢复核心数据而不是 NSArray,因此它会杀死应用程序。
  • [yourObjectArray removeObjectAtIndex:indexPath.row];根本不会从 CD 中删除对象
  • @Daij-Djan :我知道......而且 OP 想要那个......他不想删除对象......他只想从 tableview 中删除......
  • quote: "如果你也想删除对象,那么添加下面的语句。"
  • 没什么,但不会删除任何对象...... OP 甚至没有数组 ;) 不明白你为什么展示它 :)
【解决方案2】:

我在NSManagedObject 数组中获取了core data,我也遇到了同样的问题。

问题是。

在从 NSManagedObject 数组中删除之前,我已经从 tableview 中删除了行。

那就试试吧

首先从你的数组中删除我已经使用了NSManagedObject 所以我已经使用了

[mydata removeAtIndex:indexPath.row]

然后使用deleteRowAtIndexPath方法从tableview中删除行

commitEditingStyle 方法中

【讨论】:

  • [myData removeAtIndex: indexPath.row];不是一个有效的选项。
  • 这是唯一有效的选项,因为当您使用 deleteRowAtIndexPath 从 tableview 中删除行时,首先它将调用两个方法 numberOfSectionsInTableView 和 numberOfRowsInSection ,然后执行其余语句。
  • 这不是一个有效的选项,因为它不是一个可用的选项。
  • 您使用哪种类型的数组来存储核心数据的获取结果??
  • 我从实体而不是数组中获取结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 2014-08-30
相关资源
最近更新 更多