【问题标题】:Getting 'index 0 beyond bounds for empty array' error on non-empty array在非空数组上获取“空数组的索引 0 超出范围”错误
【发布时间】:2011-11-29 01:59:01
【问题描述】:

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

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];

当它与模拟器一起运行时,我得到以下输出:

count:1
* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[NSMutableArray objectAtIndex:]:空数组的索引 0 超出范围”

这发生在[self.tableView insertRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade]; 行,但NSLog 语句显示调用myArrayNSArray 不为空。我错过了什么吗?有没有人遇到过这种情况?

【问题讨论】:

    标签: objective-c ios cocoa-touch nsarray


    【解决方案1】:

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

    【讨论】:

    • 是的。我明白你的意思了,谢谢两位指出这一点。但是,我仍然有同样的问题。我在其中存储表行数据的 NSMutableArray 是一个名为 eventsArray 的 iVar。当我将 NSLog 语句更改为 NSLog(@"Count:%d", [self.eventsArray count]); 时,我得到 14 作为计数。仍然不是一个空数组。有任何想法吗? - 谢谢您的帮助。我真的很感激。
    【解决方案2】:

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

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

    【讨论】:

    • 在所有委托/数据源方法上放置断点,然后逐步执行 insertRowsAtIndexPaths 行。查看最终结果并尝试缩小引发异常的确切位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多