编辑时UITableView崩溃

时间:2011-04-24 08:58:35

标签: iphone objective-c

获取错误:[self.routineTableView insertSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationBottom];

  

* 由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'无效更新:无效的节数。更新后的表视图中包含的节数(1)必须等于更新前的表视图中包含的节数(1),加上或减去插入或删除的节数(插入1个,0删除)。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.routineTableView setEditing:editing animated:animated];

if(editing){
    [self.routineTableView insertSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationBottom];
} else {
    // delete section
}

}

更新

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[self.fetchedResultsController sections] count];
}

1 个答案:

答案 0 :(得分:1)

请确保在更新后返回当前的部分数。这意味着您需要一种方法来跟踪部分的数量,例如私有变量currentNumberOfSections中应该是NSInteger。每次插入后递增(如果删除部分,则递减)。不要忘记将-numberOfSectionsInTableView中的TableViewController方法更新为以下内容:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  return currentNumberOfSections;
}

检查您是否正在返回TableViewController的当前段数,并在其中添加新栏目。

在你的情况下,它会是这样的:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.routineTableView setEditing:editing animated:animated];

if(editing){
    [self.routineTableView insertSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationBottom];
    currentNumberOfSections++;
} else {
    // delete section
}

然后在self.routineTableView引用的类中添加/更新:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return currentNumberOfSections;
}

不要忘记将NSInteger currentNumberOfSections添加到控制器的头文件中。我也会把它放在@private部分,但这取决于你。在控制器的指定初始化程序中,将此变量的值设置为首选的默认部分数:currentNumberOfSections = 1

祝你好运!

相关问题