删除 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 的最后一部分会导致异常的主要内容,如果未能解决你的问题,请参考以下文章
带有核心数据 insertRowsAtIndexPaths 的 UITableView 导致 NSInternalInconsistencyException