31

我在表格视图单元格中使用动画...当单元格完全可见时动画工作正常。如果由于动画当时任何单元格部分可见,我的应用程序在 [_Mytableviewobject endUpdates] 行崩溃;

崩溃日志=由于未捕获的异常“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);
}
4

10 回答 10

44

在尝试使用虚拟页脚删除潜在的“空”表格视图单元格时,我遇到了同样的崩溃。

解决方案是摆脱

tableView:viewForFooterInSection:
tableView:heightForFooterInSection:

并在 viewDidLoad 中用以下内容替换它们:

tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
于 2013-11-08T14:43:16.230 回答
26

是的,我也面临这种类型的问题,做一件事只是删除页脚视图。

于 2012-07-26T10:03:06.933 回答
6

它似乎在设置时发生tableview

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

tableview样式集Plain而不是Grouped样式

于 2013-11-28T08:54:05.983 回答
5

在 ios 7 更新后我遇到了同样的问题:在我的表格视图中展开/折叠内容的“deleteRowsAtIndexPaths”期间出现了崩溃。

令人惊讶的是,我通过使用 heightForHeaderInsection 而不是 heightForFooterInSection 解决了这个问题。

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    返回 1;// 修复前为 0
}


-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    返回0;// 在修复之前是 1
}

已报告此问题 ( https://devforums.apple.com/message/795349 )。

于 2013-10-24T09:50:07.737 回答
4

您可以使用下一部分的标题我的相同答案在这里

  • 创建空白部分
  • 使用它的页眉而不是页脚

https://stackoverflow.com/a/12297703/788798

于 2012-09-06T10:13:34.770 回答
3

对于 iOS 7 更新后遇到此问题的人:检查部分页脚视图的视图框架。如果它与 tableview 单元格重叠。系统抛出此异常。

于 2013-10-28T20:29:05.583 回答
3

这是 iOS 中的一个错误。我提交了一个错误报告,他们回来说它是 14898413 的副本。这个错误在苹果错误报告器中仍然标记为打开。

修复选项:1) 删除页脚 2) 开始和结束更新不是删除行,而是重新加载表

于 2014-04-08T18:25:19.337 回答
2

每当我滚动到 tableview 的底部并尝试删除单元格并插入部分时,我都会遇到相同的错误和崩溃,我的解决方案是在[tableview beginsUpdates]使用 tableviews 内容偏移量调用之前将 tableview 滚动回顶部。有了这个解决方案,我根本不需要更改我的部分页眉或页脚。

[self.tableView setContentOffset:CGPointZero animated:NO];
于 2014-03-05T00:35:12.027 回答
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()
        }
    }
}
于 2014-08-15T12:20:45.100 回答
0

我遇到了同样的问题 - [[self tableView] endUpdates] 中的异常“单元格动画停止分数必须大于开始分数”;我通过捕获异常并第二次进行 endUpdates 来解决它。

[[self tableView] beginUpdates];
@try
{
    [[self tableView] endUpdates];
}
@catch (NSException* exception)
{
    [[self tableView] endUpdates];
}
于 2014-09-17T07:31:54.063 回答