我有这个代码在我的应用程序的根视图控制器中向表视图添加一行:
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
不为空。我错过了什么吗?有没有人曾经遇到过这个?
答案 0 :(得分:1)
在日志语句之前的行中,您将创建一个仅在此方法范围内有效的新数组。您用于表视图的数据源方法的数组是不同的,因此该数组中的对象数量根本不重要,即使它(我怀疑)具有相同的名称。
答案 1 :(得分:0)
调用insertRowsAtIndexPaths会触发要调用的UITableViewController委托/数据源方法。这样UITableView就可以获取新行的数据。您需要将数据插入数据模型,并确保numberOfRowsInSection返回新的增加值。
NSRangeException错误指的是您用于存储表行数据的NSMutableArray而不是索引路径数组。