使用insertRowsAtIndexPaths更新的表视图无效:



我在插入RowsAtIndexPaths时遇到问题:。我不太确定它是怎么工作的。我在上面看了WWDC 2010的视频,但我还是犯了一个错误。我想我应该更新模型,然后在表中包装insertRowsAtIndexPaths:View beginUpdates和endUpdates调用。我有这个:

self.customTableArray = (NSMutableArray *)sortedArray;
[_customTableView beginUpdates];
[tempUnsortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [sortedArray enumerateObjectsUsingBlock:^(id sortedObj, NSUInteger sortedIdx, BOOL *sortedStop) {
        if ([obj isEqualToString:sortedObj]) {
            NSIndexPath *newRow = [NSIndexPath indexPathForRow:sortedIdx inSection:0];
            [_customTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newRow] withRowAnimation:UITableViewRowAnimationAutomatic];
            *sortedStop = YES;
        }
    }];
}];
[_customTableView endUpdates];

customTableArray是我的模型数组。sortedArray只是该数组的排序版本。当我点击加号按钮添加新行时运行此代码时,我会收到以下错误:

由于未捕获的异常而终止应用"NSInternalConferenceException",原因:"无效更新:无效节0中的行数。包含在更新后的现有节(2)必须等于更新(1)之前该节中包含的行,加或减从该部分插入或删除的行数(插入2行,0已删除),加上或减去移入或移出的行数该节(0已移入,0已移出)。'

我不确定我做错了什么。想法?谢谢

我建议您更清楚地了解数组中的实际情况。当错误读出时,您告诉表视图出于某种原因添加两行,而它说它"有一行",然后在调用-endUpdates方法后与数据源进行检查,并且数组总共只有两个对象,而不是三个。

本质上,您的枚举是拾取两个插入。您的数组有两个对象。该表已经有一个对象。1个现有的+2个插入=3行。您的数组中只有两个当前对象。额外的对象发生了什么。

我预计,在这条线上的某个地方,要么你的两个数组不同步,要么你评估哪一个是插入的方法有某种形式的错误。

我希望这能有所帮助。

最新更新