2

我正在尝试使用以下代码删除。

[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 移动出去)。'

4

1 回答 1

2

这是因为您应该有一种动态的方式来返回行数。

例如,我创建了 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 行。基本上,您还需要更新数据源。它也适用于其他部分。因为您从数组中删除元素,所以行数也将被更新。

于 2013-01-29T11:47:33.220 回答