我知道我的某个地方有一个错误...我确实是一个非常简单的错误,它只是一个超出范围的索引错误。我曾经在我的项目中寻找并放置断点以查看它的位置。但是今天我决定要聪明并且真正学会阅读错误信息,因为我知道它就在那里!但我不知道如何阅读它,我尝试谷歌搜索,似乎没有人给我一个很好的解释!
有人可以帮我看一下这条错误信息吗?
2011-02-01 00:28:04.952 FBDiary[44083:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 26 beyond bounds [0 .. 25]'
*** Call stack at first throw:
(
0 CoreFoundation 0x011dabe9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x0132f5c2 objc_exception_throw + 47
2 CoreFoundation 0x011d06e5 -[__NSArrayM objectAtIndex:] + 261
3 FBDiary 0x00007035 -[FBFriendsList tableView:heightForRowAtIndexPath:] + 101
4 UIKit 0x004a3334 -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 2888
5 UIKit 0x004a1e8b -[UITableViewRowData(UITableViewRowDataPrivate) _ensureSectionOffsetIsValidForSection:] + 152
6 UIKit 0x004a0a0c -[UITableViewRowData numberOfRows] + 145
7 UIKit 0x003578c2 -[UITableView noteNumberOfRowsChanged] + 132
8 UIKit 0x003642b8 -[UITableView reloadData] + 773
9 UIKit 0x04e5d1f0 -[UITableViewAccessibility(Accessibility) reloadData] + 60
编辑:所以在发布问题后几分钟我发现了这个错误...正如你所说的那样,它位于tableView:heightForRowAtIndexPath:
函数中。然而,我真正想知道的是,我可以从这个堆栈跟踪中推断它导致问题的行吗?
答案 0 :(得分:1)
有趣的部分是[FBFriendsList tableView:heightForRowAtIndexPath:]
,它是代码的(唯一)部分,它是此堆栈跟踪的一部分,因此您必须在那里查找错误。
上面的行是对数组的访问以及抛出异常的结果进度。下面的行是UIKit的基类,它们“托管”您的应用程序代码,并负责在正确的时间调用正确的部分。
答案 1 :(得分:1)
看起来行的FBFriendsList高度的回调是传递超出数组范围的NSIndexPath。你有FBFriendsList,你需要设置断点并检查数组中的项目数,并检查传递的NSIndexPath。
答案 2 :(得分:1)
没有太多要阅读的内容。像往常一样,stacktrace本身并不能帮助你修复bug。
对于此错误,您需要了解UITableViewDatasource协议。
错误是由-[FBFriendsList tableView:heightForRowAtIndexPath:]
引起的,您最有可能尝试访问数据数组的元素,因为您想要返回相应的高度。
因此,将您对UITableViewDatasource的了解与您的例外结合起来
您对数据源的了解应该告诉您tableview要求当前可见的所有单元格的heightForRowAtIndexPath。
它还应该告诉你,你已经告诉tableview它应该访问多少行。
如果你将这些知识与你的例外结合起来,你应该得出结论:你在- (NSInteger)tableView:(UITableView *)tableView_ numberOfRowsInSection:(NSInteger)section
中返回的值是错误的,而且很可能是26,它应该是25。
这是UITableView最常见的错误。