2

有人可以建议我的代码中有什么问题.....

self.modelClass.foldersAray 有一个对象,tableview 有一个部分和一行

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        // Delete the row from the data source
        [self.tableview setEditing:YES animated:YES];

        [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YEs];

        [tableView reloadData];
   }
}

我收到如下错误。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
4

5 回答 5

3

这样做,

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{

      if (editingStyle == UITableViewCellEditingStyleDelete) {

          [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row];

          [tableView reloadData];
      }
}

够了…………

于 2013-02-22T12:19:19.573 回答
2

如果您的 tableView 基于foldersAray,则从此数组中删除一个对象并重新加载 tableview 将导致删除此单元格。您可以删除该行:

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YEs];
于 2013-02-22T12:23:39.897 回答
1

如果你想要动画试试这个,如果你不想要动画使用@Mountain Lion 的答案。

 -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
 forRowAtIndexPath:(NSIndexPath *)indexPath  {

       if (editingStyle == UITableViewCellEditingStyleDelete) 
         {
             [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row];
             [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationFade];
       } 
 }

如果你在导航上有编辑按钮,你应该打电话

[self.tableView setEditing:YES 动画:YES];

在您的方法中开始编辑。

于 2013-02-22T12:31:05.733 回答
1

此错误意味着您必须更新数据源(包含数据、字典或您使用的任何内容的数组)

例如:删除前有 5 个单元格,dataArray 中有 5 个对象。在调用之前,deleteRowsAtIndexPaths:我们必须从与此单元格关联的 dataArray 中删除对象,然后才调用deleteRowsAtIndexPaths:。也改为使用[tableView reloadData],使用

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];

PS 我明白了,你从数据源中删除了对象,所以仔细检查一下,也许你错过了什么

于 2013-02-22T12:18:54.253 回答
1

如果它占用的内存对您来说无关紧要......那么您可以通过将高度设置为 0 来显着删除(隐藏)单元格。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row%2) {
        return 0;
    }
    return 100;
}

PS:上面的虚拟代码将大大删除备用单元格。

于 2015-07-23T05:43:26.757 回答