NSInternalInconsistencyException 表格视图中的节号错误?
Posted
技术标签:
【中文标题】NSInternalInconsistencyException 表格视图中的节号错误?【英文标题】:NSInternalInconsistencyException wrong section number in table view? 【发布时间】:2012-10-03 10:37:40 【问题描述】:我的 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 问题仍然存在。
【问题讨论】:
“numberOfSectionsinTable”和“numberOfRowsinTableView”函数返回什么值 @AppleDelegate 如何打印?通过 NSLog??? 是的.. 通过 NSLog.. 你可以找到@什么情况下你得到了例外.. 正如@Niels 回答的那样,你对该部分所做的修改应该反映到numberOfSectionsInTableView:
【参考方案1】:
如果您在 UITableView 中插入一个部分,您应该确保此更改反映在您的数据源中。在这种情况下,您的 numberOfSectionsInTableView: 方法应在插入新部分时返回额外的一行。
【讨论】:
所以代码修改应该在numberOfSectionsInTableView中进行? 那么你应该在调用 insertSections: 之前进行一些更改,以便 numberOfSectionsInTableView 返回插入前的节数加上你要插入的节数。 你能发布你的 numberOfSectionsInTableView 实现吗?那么也许我可以澄清一下 我刚刚用部分函数编辑了我的问题。我想你会明白的 基于异常,我可以看到您在调用 insertSection: 之前返回了 2 个部分:之后又返回了 1 个。 numberOfSectionsInTableView 应该返回 3 如果您将 1 部分添加到已经存在的 2 中【参考方案2】:我实际上收到了这个错误,因为有一点红鲱鱼。我有一个表格部分和表格单元格的模型,我用它来管理内存中的单元格,然后再将它们呈现在屏幕上。在我的特殊情况下,我试图使用 [NSArray indexOfObject:cell] 方法查找已删除单元格的索引。由于单元格当然已经从集合中删除,而不是抛出异常,objective-c 向我返回了 int 最大值,这导致了这个问题中出现的异常,因为我随后从返回的值创建了一个 NSIndexPath无效的。
【讨论】:
以上是关于NSInternalInconsistencyException 表格视图中的节号错误?的主要内容,如果未能解决你的问题,请参考以下文章