在UITableView中删除/插入行时,UIKit崩溃

时间:2015-05-26 09:51:00

标签: objective-c uitableview

在我的UiTableView中,我将动态数据加载到其中,当用户滚动到UITableView i的底部时,然后加载更多项目并将它们插入到表格的底部。这没有问题。但是,如果用户加载项目,则删除一个项目并滚动到底部(要加载更多项目)应用程序崩溃。

从我可以解决的问题来看,在将项目插入table virew时,dataSource或计数不匹配 - 我无法解决我出错的地方。

这是我正在使用的代码:

NSIndexSet  *indexSectionsToInsert = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(questionsCount, [questions.questionsAndAnswersArray count])];


[self.tableView beginUpdates];

if (loadingMore){

    NSIndexPath *indexSectionsToDelete = [NSIndexPath indexPathForItem:0 inSection:[currentArray count]];

    [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:indexSectionsToDelete.section] withRowAnimation:UITableViewRowAnimationTop];
    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
    loadingMore = NO;
}

[self.tableView insertSections:indexSectionsToInsert
          withRowAnimation:UITableViewRowAnimationTop];


[currentArray addObjectsFromArray:questions.questionsAndAnswersArray];

[self.tableView endUpdates];

当它在deleteSections if语句中尝试loadingMore时发生崩溃。控制台显示:

  

'NSInternalInconsistencyException',原因:'无效更新:无效的节数。更新后的表视图中包含的节数(25)必须等于更新前的表视图中包含的节数(25),加上或减去插入或删除的节数(0插入,1删除)。“

然而,当我检查我的计数时,它们似乎都是正确的。它们都是24,这是删除后tableview中当前的部分数。

一次将25个项目加载到tableview中。

以下是崩溃发生前索引的样子:

删除

<NSIndexPath: 0xc000000000000616> {length = 2, path = 24 - 0}

我将其视为“删除第0至24部分” - 我认为这是正确的。

然后插入:

<NSIndexSet: 0x7f84c65ed0b0>[number of indexes: 25 (in 1 ranges), indexes: (24-48)]

我认为“插入第24至48节” - 在我看来是正确的。

我在正常加载条件下查看了上面的索引,而不是删除后,它工作正常:这是索引的样子:

删除

<NSIndexPath: 0xc000000000000616> {length = 2, path = 25 - 0}

然后插入:

<NSIndexSet: 0x7f84c65ed0b0>[number of indexes: 25 (in 1 ranges), indexes: (25-49)]

所以只有1,这是正确的,因为我只删除了一个部分。那么,问题在哪里?

1 个答案:

答案 0 :(得分:1)

...beginUpdates...endUpdates方法之间移动存储修改代码。