3

我正在尝试使用向 tableview 添加一行

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

它抛出一个异常,我调用 insertRowsAtIndexPaths:withRowAnimation:,它说

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

它返回正确数量的行和部分,但在抛出异常之前它从未到达 cellForRowAtIndexPath。我也在使用情节提要执行此操作,并且我将 tableView 设置为具有静态单元格,因为大多数 tableView 实际上确实具有静态单元格。我真的不想切换到动态原型,因为那样我就不能拥有我正在使用的 IBOutlets 和 IBActions,而且我必须从根本上重新开始考虑单元格的布局。有什么方法可以让我摆脱这个异常而不改变我的 tableView 来拥有动态原型单元格?

编辑

我发布之前的那一行是

[itemsInCurrentPurchase insertObject:itemName atIndex:0];

这应该更新数组。我在用

[itemsInCurrentPurchase count]

对于我在节中的行数,它在更新后返回正确的数字。问题是甚至没有达到 cellForRowAtIndexPath 方法。在更新期间,在行数和可能导致此错误的单元格类型之间是否还有其他调用?

4

1 回答 1

9

在插入行之前,您需要使用这个新对象更新您的数据源。否则它会在尝试用这个新行更新表视图时崩溃。

例如:-

[self.dataSourceArray insertObject:object atIndex:indexPath.row];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
于 2013-01-05T20:57:55.803 回答