如果最初为空表,则向UITableView崩溃添加行

时间:2011-05-11 10:44:29

标签: uitableview row add

我正在使用下面的代码刷新一个我只是添加了一行的tableview。如果表中已有至少1行,则该代码适用于向表中添加行。但是,如果它最初是一个空表,它会崩溃。

NSArray *indexPaths = [NSArray arrayWithObjects: [NSIndexPath indexPathForRow:[commentsArray count] inSection:0], nil];

[commentsTableView beginUpdates];

[commentsArray addObject:newestEntry];
[commentsTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationBottom];

[commentsTableView endUpdates];

[commentsTableView scrollToBottom:YES];

我得到的崩溃响应是:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (0), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted).'

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

嗯,错误告诉您UIKit调用tableView:numberOfRowsInSection何时在更新之前和之后返回0。因此,要么您在该方法或更新中出错。你在前面的回答中说你的tableView:numberOfRowsInSection是正确的,那么它必须是更新。如果commentsArray在第一次更新中由于某种可能解释事情的原因而为零。也许尝试以下方法:

NSAssert(commentsArray, @"commentsArray is nil");
[commentsArray addObject:newestEntry];

在发布版本中将忽略断言,因此请使用调试版本。

答案 1 :(得分:0)

确保用于更新的阵列与重新加载表时使用的阵列相同。

//自定义表格视图中的行数。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [commentsArray count];
}

如果这无法解决您的问题,请在此处输入一些代码。