2

tableview我有很多部分中,在部分的第一行我有一个删除按钮,我想在单击按钮后删除部分但它崩溃了请帮助我该怎么做?这是代码...

//****** adding delete section button
     CellButton *_sectionButton = (CellButton*)[cell viewWithTag:10];
     _sectionButton.hidden = YES;
     _sectionButton.indexPath = indexPath;
     [_sectionButton addTarget:self action:@selector(sectionDeleteButton:)      forControlEvents:UIControlEventTouchUpInside];

-(void)sectionDeleteButton: (id)sender
{
   CellButton *_secbtn = (CellButton*)sender;
   NSInteger sectionNumber = _secbtn.indexPath.section;
   [self.tableView beginUpdates];
   [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionNumber] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self.tableView endUpdates];
    [self.tableView reloadData];

}

编辑:错误消息是:

-[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableView.m:1054 2013-07-04 04:25:15.921 估计 [9025:c07] 中的断言失败 *** 由于未捕获的异常而终止应用程序' NSInternalInconsistencyException',原因:'无效更新:无效的节数。更新后表视图中包含的节数(2)必须等于更新前表视图中包含的节数(2),加上或减去插入或删除的节数(0插入,1已删除)

4

4 回答 4

6

我猜numberOfSectionsInTableView:返回之前的部分数量。您必须确保您告诉表视图执行的操作也发生在数据源中。也就是说,如果你删除了一个部分,那么numberOfSectionsInTableView也必须返回一个比以前少一个的数字。这同样代表细胞和其他一切。这可能在您收到的错误中有所描述。

于 2013-07-04T11:15:58.030 回答
1

您必须在numberOfSectionsInTableview:委托方法中管理您的部分数量

于 2013-07-04T12:09:00.997 回答
0
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
//#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//#warning Incomplete method implementation.
    // Return the number of rows in the section.
    return  [MLControl shared].arrBuyList.count;//1;//[MLControl shared].arrBuyList.count;
}

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
       // [tableView beginUpdates];
        NSLog(@"indexPath.row=%ld,indexPath.se=%ld",(long)indexPath.row,(long)indexPath.section);
        [[MLControl shared].arrBuyList removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    //    [tableView endUpdates];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
于 2014-11-28T06:46:45.463 回答
0

我遇到了这个问题,但原因与你的不同。

当我为 tableView 添加一个部分时,我使用此方法重新加载数据,这也会像您的那样崩溃日志记录:

[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];

为什么我使用这种方法来重新加载我的表?如果我只刷新单元格,这可以正常工作,但我忘记了我想更改这些部分。有关更多信息:重新加载 UITableView 数据的更可靠方法是什么?

于 2016-08-16T16:34:11.587 回答