NSMutableArray索引9223372036854775807超出范围

7
我通过一个崩溃报告找到了这篇文章:
*** -[__NSArrayM objectAtIndex:]: index 9223372036854775807 beyond bounds [0 .. 8]
CoreFoundation-[__NSArrayM removeObjectAtIndex:]

这是负责的代码:

[self someMethodwithCallback:^(NSMutableArray *stickerArray)
{
   _tableViewController.tableView beginUpdates];

   _layersArray = stickerArray;

   NSArray *reversed = [[_layersArray reverseObjectEnumerator] allObjects];

   _layersArray = [reversed mutableCopy];

  [_tableViewController.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];

  [_tableViewController.tableView endUpdates];

  [_tableViewController.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionNone];

  [_delegate stickerSelectedAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
}

这个庞大的索引会在哪里以及如何创建呢?


9
很明显,你数组中缺失了第9223372036854775807个对象。确保你的数据源至少有9223372036854775808个对象。更严肃的是,这是最大的64位数字。使用断点来找出导致崩溃的代码行。 - Oscar Apeland
2
@DavidRönnqvist 9223372036854775807 是 long_max,但 NSArray 的索引是无符号的,所以是的,9223372036854775808 是可能的。;-) - Léo Natan
3
数字9223372036854775807在16进制表示为0x7FFFFFFFFFFFFFFF,代表有符号数-1。因此似乎索引在某处变成了负数。 - Flovdis
1
我认为我们可能需要查看调用堆栈。 - nielsbot
1
我想指出的是,在您的清单中没有任何objectAtIndex或removeObjectAtIndex调用。我认为您没有正确的代码。(由于缺乏信息而投票关闭。) - Hot Licks
显示剩余10条评论
1个回答

16
我相信所讨论的索引是NSNotFound。 你可能是从“在数组中查找”操作的结果(或从其中返回的NSRange的位置)中获取了索引。

1
很遗憾,这个问题被关闭了,理由是“缺乏足够的信息来诊断问题”,但我在谷歌上搜索了我得到的错误信息:“索引9223372036854775807超出范围”,然后就找到了这个Stack Overflow的问题。我之所以这样做是因为我认为像那样的奇怪数字可能不是随机的。感谢您的回答。 - Mario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接