NSInternalInconsistencyException表视图中的错误节号?

时间:2012-10-03 10:37:41

标签: iphone ios uitableview uiview

我的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,问题仍然存在。

2 个答案:

答案 0 :(得分:0)

如果您将一个部分插入UITableView,您应该确保此更改反映在您的dataSource中。在这种情况下,您的numberOfSectionsInTableView:方法应该在插入新部分时返回一行。

答案 1 :(得分:0)

由于有轻微的红鲱鱼,我实际上收到了这个错误。我有一个表格部分和表格单元格的模型,用于在屏幕上渲染之前管理内存中的单元格。在我的特定情况下,我试图使用[NSArray indexOfObject:cell]方法找到已删除单元格的索引。由于单元格当然已从集合中删除,而不是抛出异常,因此objective-c返回了int max值,导致此问题中显示的异常,因为我随后从返回的值创建了一个NSIndexPath,随后无效。