删除 UITableView 的最后一部分会导致异常

Posted

技术标签:

【中文标题】删除 UITableView 的最后一部分会导致异常【英文标题】:Deleting the last section of a UITableView causes an exception 【发布时间】:2015-11-27 06:05:50 【问题描述】:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UITableView 内部错误:无法生成旧节数:1 和新节数:0 的新节图”

下面是代码

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    @try 
        NSMutableArray *arrData = [dictStartDate* objectForKey:self.navigationItem.title];
        NSLog(@"Title : %@", self.navigationItem.title);
        NSLog(@"Array count : %i", (int)arrData.count);
        return arrData.count;
    
    @catch (NSException *ex) 
        [[ProjectHandler sharedHandler]LogException:ex.name description:ex.description className:@"TodayTasksViewController" functionName:@"numberOfRowsInSection"];
        return 0;
    

【问题讨论】:

信息太少了。我猜您只是删除了该部分的最后一个单元格,并且由于您的代码,您的 numberofsections 方法返回计数比以前少。也许您可以向我们展示您的代码。 【参考方案1】:

我遇到了这个问题,我解决了这个问题,测试我是否删除了一个部分的最后一行,如果是,我没有删除该行,而是删除了该部分。我给numberOfSectionsInTableView返回0没有问题,tableView就是空的。

下面是我用来检查它是否是一个部分的最后一行的swift代码以及关键部分,即删除该部分而不是该行。

假设您在表视图中有部分对象,如下所示:

var objects: [[Object]]?

然后,如果您要使用此对象删除此表的一行,您应该这样做:

objects![indexPath.section].removeAtIndex(indexPath.row)
if (objects![indexPath.section].count == 0) 
    objects!.removeAtIndex(indexPath.section)
    tableView.deleteSections(NSIndexSet.init(index: indexPath.section), withRowAnimation: .Left)
    return //End the func and not execute the next step


tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left) 

您也可以使用类似的方法来确定它是否是部分中的最后一行:

tableView.numberOfRowsInSection(indexPath.section)

【讨论】:

【参考方案2】:

您似乎要删除表格中的唯一部分。一个表必须至少有 1 个部分。您可能需要检查您的代码以检查您在 numberOfSectionsInTableView: 中没有返回 0

【讨论】:

这是不正确的。请参阅文档:developer.apple.com/reference/uikit/uitableview > 一个表由零个或多个部分组成

以上是关于删除 UITableView 的最后一部分会导致异常的主要内容,如果未能解决你的问题,请参考以下文章

从 UITableView 中删除行会导致部分标题问题?

从 UITableView 中删除值会导致崩溃

带有核心数据 insertRowsAtIndexPaths 的 UITableView 导致 NSInternalInconsistencyException

从部分移动最后一行时如何删除部分标题

UITableView删除cell导致崩溃的bug

从 tableview 部分删除最后一行时,iOS 应用程序崩溃