获取错误:[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];
}
答案 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
。