0

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

4

2 回答 2

0

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

于 2012-10-03T10:46:00.427 回答
0

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

于 2014-12-29T18:21:33.200 回答