当我调用[tableView insertRowsAtIndexPaths:withRowAnimation:]时,在iOS10中崩溃

时间:2016-10-17 08:16:59

标签: ios uitableview

- (void)registerCellCallBack:(id<CellCallBack>)callBack {
    int i = 0;
    for(; i < _dataSource.count; ++i) {
        id<CellCallBack> oldCallBack = _dataSource[i];
        if([callBack key] <= [oldCallBack key]) {
            break;
        }
    }
    if(i < _dataSource.count) {
        [_dataSource insertObject:callBack atIndex:i];
    } else {
        [_dataSource addObject:callBack];
    }

    [self.table beginUpdates];
    [self.table insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:i inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
    [self.table endUpdates]; //--crashed here called "NSInternalInconsistencyException(SIGABRT)"
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _dataSource.count;
}

iOS9中的代码很好,在iOS10中崩溃,但在我调试代码时没有出现。

崩溃信息

  

无效更新:第0部分中的行数无效   更新后现有部分中包含的行数(7)   必须等于之前该部分中包含的行数   更新(0),加上或减去插入或删除的行数   从该部分(插入1,删除0)和加号或减号   移入或移出该部分的行(0移入,0移出)。

1 个答案:

答案 0 :(得分:0)

您需要按以下方式进行更改:

 [self.table reloadData];

 [self.table beginUpdates];
 [self.table insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:i inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
 [self.table endUpdates]; //--crashed here called "NSInternalInconsistencyException(SIGABRT)"