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 表格视图中的节号错误?的主要内容,如果未能解决你的问题,请参考以下文章

无法在包中加载 Nib - 错误的 nibname 错误