【发布时间】: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