我正在尝试使用以下代码删除。
[super deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
它返回多个异常。
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:1070
2013-01-29 16:28:22.628
由于未捕获的异常而终止应用程序
“NSInternalInconsistencyException”,原因:“无效的更新:无效
第1节中的行数。
更新(5)之后的现有部分必须等于
更新(5)之前该部分中包含的行,正负
从该部分插入或删除的行数(已插入0,
5已删除),加上或减去移入或移出的行数
该部分(移入0,移出0)。”
最佳答案
这是因为您应该有一种动态的返回行数的方法。
例如,我创建一个3个数组。每个都有3个值(这些是NSArray
变量):
在.h
文件中:
NSArray *firstArray;
NSArray *secondArray;
NSArray *thirdArray;
在
.m
文件中,使用viewDidLoad或init或类似的方法:firstArray = [NSArray arrayWithObjects:@"Cat", @"Mouse", @"Dog", nil];
secondArray = [NSArray arrayWithObjects:@"Plane", @"Car", @"Truck", nil];
thirdArray = [NSArray arrayWithObjects:@"Bread", @"Peanuts", @"Ham", nil];
当返回表中的行数时,我有:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return array.count;
if (section == 0) {
return firstArray.count;
} else if (section == 1) {
return secondArray.count;
} else {
return thirdArray.count;
}
}
然后,在
cellForRow
中:- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
if (indexPath.section == 0) {
cell.textLabel.text = [firstArray objectAtIndex:indexPath.row];
} else if (indexPath.section == 1) {
cell.textLabel.text = [secondArray objectAtIndex:indexPath.row];
} else {
cell.textLabel.text = [thirdArray objectAtIndex:indexPath.row];
}
return cell;
}
然后,我通过在表格上滑动或您要删除的其他方式来删除
@"Dog"
。然后,当重新加载表时,您的数组数将为2,因此表将“知道”它仅需显示2行。基本上,您还需要更新数据源。它也适用于其他部分。因为您从数组中删除了元素,所以行数也会被更新。
关于ios - iOS-deleteRowsAtIndexPaths崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14581923/