我在表视图单元格中使用动画...当单元格完全可见时,动画工作正常。如果当时任何单元格部分可见由于动画我的应用程序在行[_Mytableviewobject endUpdates]中崩溃了; < / p>
崩溃日志=由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'单元格动画停止分数必须大于起始分数'
代码部分:
-(void)sectionHeaderView:(SectionHeaderView*)sectionHeaderView sectionOpened:(NSInteger)sectionOpened
{
//ENSLog(self, _cmd);
[_caseTable reloadData];
NSInteger countOfRowsToInsert = 1;
SectionInfo *sectionInfo = [self.sectionInfoArray objectAtIndex:sectionOpened];
sectionInfo.open = YES;
NSMutableArray *indexPathsToInsert = [[[NSMutableArray alloc] init] autorelease];
for (NSInteger i = 0; i < countOfRowsToInsert; i++)
{
[indexPathsToInsert addObject:[NSIndexPath indexPathForRow:i inSection:sectionOpened]];
}
NSMutableArray *indexPathsToDelete = [[[NSMutableArray alloc] init] autorelease];
NSInteger previousOpenSectionIndex = self.openSectionIndex;
if (previousOpenSectionIndex != NSNotFound)
{
SectionInfo *previousOpenSection = [self.sectionInfoArray objectAtIndex:previousOpenSectionIndex];
previousOpenSection.open = NO;
[previousOpenSection.headerView toggleOpenWithUserAction:NO];
NSInteger countOfRowsToDelete = 1;
for (NSInteger i = 0; i < countOfRowsToDelete; i++)
{
[indexPathsToDelete addObject:[NSIndexPath indexPathForRow:i inSection:previousOpenSectionIndex]];
}
}
// Style the animation so that there's a smooth flow in either direction.
UITableViewRowAnimation insertAnimation;
UITableViewRowAnimation deleteAnimation;
if (previousOpenSectionIndex == NSNotFound || sectionOpened < previousOpenSectionIndex)
{
insertAnimation = UITableViewRowAnimationTop;
deleteAnimation = UITableViewRowAnimationBottom;
}
else
{
insertAnimation = UITableViewRowAnimationTop;
deleteAnimation = UITableViewRowAnimationTop;
}
// Apply the updates.
[_caseTable beginUpdates];
[_caseTable deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:deleteAnimation];
[_caseTable insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:insertAnimation];
[_caseTable endUpdates];
//ExNSLog(self, _cmd);
self.openSectionIndex = sectionOpened;
//ExNSLog(self, _cmd);
}
-(void)sectionHeaderView:(SectionHeaderView*)sectionHeaderView sectionClosed:(NSInteger)sectionClosed
{
//ENSLog(self, _cmd);
SectionInfo *sectionInfo = [self.sectionInfoArray objectAtIndex:sectionClosed];
sectionInfo.open = NO;
NSInteger countOfRowsToDelete = [_caseTable numberOfRowsInSection:sectionClosed];
if (countOfRowsToDelete > 0)
{
NSMutableArray *indexPathsToDelete = [[[NSMutableArray alloc] init] autorelease];
for (NSInteger i = 0; i < countOfRowsToDelete; i++)
{
[indexPathsToDelete addObject:[NSIndexPath indexPathForRow:i inSection:sectionClosed]];
}
[_caseTable deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:UITableViewRowAnimationTop];
}
self.openSectionIndex = NSNotFound;
//ExNSLog(self, _cmd);
}
答案 0 :(得分:44)
我在尝试使用虚拟页脚删除潜在的“空”表格视图时遇到了同样的崩溃。
解决方案是摆脱
tableView:viewForFooterInSection:
tableView:heightForFooterInSection:
并在viewDidLoad中使用以下内容替换它们:
tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
答案 1 :(得分:26)
是的我也面临这类问题,做一件事就是删除页脚视图。
答案 2 :(得分:6)
似乎在设置tableview
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
tableview
样式集Plain
而不是Grouped
样式
答案 3 :(得分:5)
在ios 7更新后我遇到了同样的问题:在我的表格视图中展开/折叠内容的“deleteRowsAtIndexPaths”期间出现了崩溃。
令人惊讶的是,我通过使用heightForHeaderInsection而不是heightForFooterInSection解决了这个问题。
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 1; // it was 0 before the fix } -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0; // it was 1 before the fix }
答案 4 :(得分:4)
答案 5 :(得分:3)
对于在iOS 7更新后遇到此问题的人: 检查节页脚视图的视图框。如果它与tableview单元格重叠。系统抛出此异常。
答案 6 :(得分:3)
这是iOS中的一个错误。我提交了一个错误报告,他们回来说它是14898413的副本。这个错误在苹果bug记者中仍然标记为开放。
修正选项: 1)删除页脚 2)开始和结束更新不是删除行,而是重新加载表
答案 7 :(得分:2)
每当我滚动到tableview的底部并尝试删除单元格并插入部分时,我得到相同的错误并崩溃我的解决方案是在使用tableviews调用[tableview beginsUpdates]
之前将tableview滚动回顶部内容偏移。有了这个解决方案,我根本不需要改变我的节头或页脚。
[self.tableView setContentOffset:CGPointZero animated:NO];
答案 8 :(得分:0)
我通过为最后一节调用reloadData()解决了这个问题:
func expandSectionPressed(sender: UIButton) {
let object = items[sender.tag]
object.expanded = !object.expanded
sender.selected = object.expanded
var indexPaths = [NSIndexPath]()
for i in 0..<7 {
indexPaths.append(NSIndexPath(forRow: i, inSection: sender.tag))
}
if object.expanded {
tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Fade)
} else {
// strange crash when deleting rows from the last section //
if sender.tag < numberOfSectionsInTableView(tableView) - 1 {
tableView.deleteRowsAtIndexPaths(indexPaths, withRowAnimation: .Fade)
} else {
tableView.reloadData()
}
}
}
答案 9 :(得分:0)
我遇到了同样的问题 - 在[[self tableView] endUpdates]中,异常'单元动画停止分数必须大于起始分数';我通过捕获异常并第二次进行endUpdates来解决它。
[[self tableView] beginUpdates];
@try
{
[[self tableView] endUpdates];
}
@catch (NSException* exception)
{
[[self tableView] endUpdates];
}