对于我的iPad项目,我需要能够重新加载表格行。 这是它应该如何工作,取决于从弹出视图中选择的一些“id”,我需要能够重新加载表行,表行是动态的并且在其中有一个UITextField。我尝试使用[self.tableView reload]但由于某种原因它没有正确更新行。像之前的“id”所拥有的UITextField占位符之类的东西不会改变。我想到的是删除该特定部分中的所有单元格并使用新的“id”重新加载表。当我这样做时,我得到了这个例外:
* 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后现有部分中包含的行数(3)更新(3)之前必须等于该部分中包含的行数,加上或减去从该部分插入或删除的行数(插入0,删除3)。'
项目代码:
- (void)selectedArchiefID:(NSString *) value {
[self.popOverController dismissPopoverAnimated:YES];
// collects all available document indexfields
int rowCount = [indexDefinities count];
NSMutableArray *indexPaths = [[NSMutableArray alloc] init];
for (int curIndex=0; curIndex < rowCount; curIndex++) {
[indexPaths addObject:[NSIndexPath indexPathForRow:curIndex inSection:0]];
}
// deletes rows
if ([indexPaths count] > 0) {
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
//[self.tableView deleteSections:0 withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates]; //crashes here
}
[self.tableView reloadData];
}
知道我做错了吗?
答案 0 :(得分:0)
您似乎忘了更改tableview数据源的数据。
您不能只更改tableview布局。
如果要删除某个部分,则必须先从数据源中删除此部分。 您可以通过删除NSMutableArray中的部分(这是您的数据源)以简单的方式执行此操作。
或者你可以编写一个大的if if else怪物,它可以计算出numberOfSectionsInTableView:
和tableView:numberOfRowsInSection:
中要返回多少部分(和行)。
无论您如何操作,都必须在更新tableview之前删除数据。
另外一件事,在一种方法中同时使用[self.tableView beginUpdates]; /*...*/ [self.tableView endUpdates];
和[self.tableView reloadData];
通常是无用的。后者会杀死你从第一个获得的动画效果。