错误:尝试删除并重新加载相同的索引路径

时间:2015-08-28 10:10:15

标签: objective-c xcode6.4

我有一个UITableView的扩展/折叠系统。当我们打开第一个项目而我们想要打开另一个项目时会发生此错误。 如果我们打开另一个项目时屏幕上看不到第一个项目(已打开),则会发生错误,但如果第一个项目(已打开)可见,则没有问题。

-(void)expandCollapseItemAtIndex:(NSInteger)row
{
    [self.SousRubriqueTableView beginUpdates];
    if (indexCurrentSousRubrique == row) {
        indexCurrentSousRubrique = -1;
        [self collapseSubItemsAtIndex:row];
    }
    else {
        BOOL shouldCollapse = indexCurrentSousRubrique > -1;

        if (shouldCollapse) [self collapseSubItemsAtIndex:indexCurrentSousRubrique];

        indexCurrentSousRubrique = (shouldCollapse && row > indexCurrentSousRubrique) ? row - [[mesSupportNumerique objectAtIndex:indexCurrentSousRubrique] count] : row;

        [self expandItemAtIndex:indexCurrentSousRubrique];
    }
    [self.SousRubriqueTableView endUpdates];
}

-(void)expandItemAtIndex:(NSInteger)index
{
    NSMutableArray *indexPaths = [NSMutableArray new];
    NSArray *currentSubItems = [mesSupportNumerique objectAtIndex:index];

    NSInteger insertPos = index + 1;
    for (int i = 0; i < [currentSubItems count]; i++) {
        [indexPaths addObject:[NSIndexPath indexPathForRow:insertPos++ inSection:0]];
    }
    [self.SousRubriqueTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationBottom];
    [self.SousRubriqueTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

    /* CRASH HERE */
    [self.SousRubriqueTableView beginUpdates];
    [self.SousRubriqueTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
    [self.SousRubriqueTableView endUpdates];


}

- (void)collapseSubItemsAtIndex:(NSInteger)index
{
    NSMutableArray *indexPaths = [NSMutableArray new];

    for (NSInteger i = index + 1; i <= index + [[mesSupportNumerique objectAtIndex:index] count]; i++) {
        [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
    }

    [self.SousRubriqueTableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];

    [self.SousRubriqueTableView beginUpdates];
    [self.SousRubriqueTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
    [self.SousRubriqueTableView endUpdates];

}

reloadRowsAtIndexPaths更改单元格三角形视图状态(打开/关闭)

0 个答案:

没有答案