【发布时间】:2014-08-04 16:01:41
【问题描述】:
我正在尝试删除在我的拆分视图控制器中显示的 tableview 行。当我向左滑动并单击删除时,我的应用程序崩溃了,并且出现错误:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后现有节中包含的行数(44)必须等于行数更新前包含在该节中 (44),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该节的行数(0 移入, 0 移出)。'
我确实设法让重新排列选项适用于表格视图而没有任何错误。对于删除行功能,我做了以下操作:
- (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[_objects removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
但一定有我遗漏的东西。也许是一个简单的更新表格视图。我想我试过了,但没有成功。
我知道在我的项目中仅使用一种方法将很难确定。你可以在这里查看我的整个项目:
https://github.com/mithunan/presidents-splitView
非常感谢任何帮助。
编辑----
这是 numberOfRowsInSection 方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.presidents count];
}
而且这种方法也可能有帮助......
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
id object = [self.presidents objectAtIndex:fromIndexPath.row];
[_objects removeObjectAtIndex:fromIndexPath.row];
[_objects insertObject:object atIndex:toIndexPath.row];
}
谢谢
编辑 2 -------------
根据 rmaddy 提供的信息,我更改了 commitEditingStyle...
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.presidents removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
但现在我得到一个构建错误:NSArray 没有可见的@interface 声明选择器'removeObjectAtIndex:'
对不起,如果我要求太多,但请您指导我完成这个。
【问题讨论】:
-
您测试的是哪个版本的 iOS?
-
我在实际设备上测试了我的 7.0,并在 xcode 5 上的模拟器上测试了 7.1。注意:我在 xcode6 beta 2 中创建了应用程序。但目标是 ios 7.0。
-
iOS 8 中存在错误,但在 iOS 7 下它应该可以工作。两件事:1)在调用
commitEditingStyle时检查_objects不是nil。 2) 确认您的numberOfRowsInSection在从_objects删除对象后返回正确的新行数。 -
我在 commitEditingStyle 方法的 deleteRowsAtIndexPaths 行和底部调试窗口中添加了一个断点,它说 _objects 为 nil。我对此比较陌生,不确定下一步应该做什么。
-
那就是问题所在。由于
_objects是nil,因此您不会更新数据模型以反映已删除的行。在您的问题中发布您的numberOfRowsInSection方法。它用什么来返回行数?是_objects还是别的什么?
标签: ios uitableview nsmutablearray nsindexpath