在非空数组上获取'索引0超出空数组的边界'错误

时间:2011-10-01 15:19:50

标签: objective-c ios cocoa-touch nsarray

我有这个代码在我的应用程序的根视图控制器中向表视图添加一行:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

NSArray *myArray = [NSArray arrayWithObject:indexPath];

NSLog(@"count:%d", [myArray count]);

[self.tableView insertRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade];

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

当它与模拟器一起运行时,我得到了这个输出:

  

数:1个
   *由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [NSMutableArray objectAtIndex:]:索引0超出空数组的边界'

这发生在[self.tableView insertRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade];行,但NSLog语句显示NSArray名为myArray不为空。我错过了什么吗?有没有人曾经遇到过这个?

2 个答案:

答案 0 :(得分:1)

在日志语句之前的行中,您将创建一个仅在此方法范围内有效的新数组。您用于表视图的数据源方法的数组是不同的,因此该数组中的对象数量根本不重要,即使它(我怀疑)具有相同的名称。

答案 1 :(得分:0)

调用insertRowsAtIndexPaths会触发要调用的UITableViewController委托/数据源方法。这样UITableView就可以获取新行的数据。您需要将数据插入数据模型,并确保numberOfRowsInSection返回新的增加值。

NSRangeException错误指的是您用于存储表行数据的NSMutableArray而不是索引路径数组。