我的UIView中有一个UITableView,它具有可变数量的部分,具体取决于某些条件。我收到以下例外情况。
由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'无效更新:无效 部分数量。表中包含的部分数量 更新后的视图(1)必须等于部分的数量 更新前的表视图中包含(2),加上或减去 插入或删除的部分数量(插入1个,删除0个)。
从错误看来,我在数据源中有不同数量的部分??? 我该如何解决这个问题?
这是我的界面:
@interface bookDetailView : SomeView <UITableViewDelegate,UITableViewDataSource>
{
UITableView *bookDetailTableView;
....
}
这是我的视图初始化
UIView *view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];
view.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
self.view = view;
UITableView *tableView = [[[UITableView alloc] initWithFrame:view.bounds style:UITableViewStyleGrouped] autorelease];
tableView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
tableView.delegate = self;
tableView.dataSource = self;
tableView.sectionIndexMinimumDisplayRowCount = 20;
bookDetailTableView = tableView;
[self.view addSubview:bookDetailTableView];
代码在insertSections ....崩溃。
if (![book method1])
{
[bookDetailTableView insertSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,1)] withRowAnimation:UITableViewRowAnimationFade];
}
else
{
[bookDetailTableView insertSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(2,1)] withRowAnimation:UITableViewRowAnimationFade];
}
numberOfSectionsInTableView
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if (editMode)
{
if(newbookFlag || listBook )
{
return 1;
}
else
{
if(![book preferable])
{
return 2;
}
else
{
return 3;
}
}
}
}
有什么想法吗?我尝试了beginUpdates和endUpdates,问题仍然存在。
答案 0 :(得分:0)
如果您将一个部分插入UITableView,您应该确保此更改反映在您的dataSource中。在这种情况下,您的numberOfSectionsInTableView:方法应该在插入新部分时返回一行。
答案 1 :(得分:0)
由于有轻微的红鲱鱼,我实际上收到了这个错误。我有一个表格部分和表格单元格的模型,用于在屏幕上渲染之前管理内存中的单元格。在我的特定情况下,我试图使用[NSArray indexOfObject:cell]方法找到已删除单元格的索引。由于单元格当然已从集合中删除,而不是抛出异常,因此objective-c返回了int max值,导致此问题中显示的异常,因为我随后从返回的值创建了一个NSIndexPath,随后无效。