2011-01-31 67 views
1

我知道我有一个错误的地方...我确实是一个非常简单的错误,它只是一个索引超出界限的错误。我曾经在我的项目中寻找并放置断点以查看它的位置。但今天我决定变得聪明,并实际学会阅读错误信息,因为我知道它就在那里!但我不知道如何阅读它,我尝试了Google搜索,似乎没有人给我一个很好的解释!如何理解目标c中的错误消息?

任何人都可以帮我读这个错误信息吗?

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 

编辑:发布我发现的bug ......至于你说这是在tableView:heightForRowAtIndexPath:功能的问题,所以几分钟后。然而我真正想知道的是,我可以从这个堆栈跟踪中推断出导致问题的线吗?

+0

这只是一个堆栈跟踪 - 显然在FBFriendsList中,您尝试访问超出NSArray末尾的元素。 – 2011-01-31 13:39:56

回答

1

没有太多可读的东西。和往常一样,单独的堆栈跟踪不会帮助您修复该错误。

对于这个错误,你需要了解UITableViewDatasource协议。

错误是由-[FBFriendsList tableView:heightForRowAtIndexPath:]引起的,其中您很可能尝试访问数据数组的一个元素,因为您要返回相应的高度。

所以结合你的关于UITableViewDatasource的知识与你的例外。
您对数据源的知识应该告诉您,tableview会为当前可见的所有单元格请求heightForRowAtIndexPath。
它也应该告诉你,你已经告诉了tableview它应该访问多少行。

如果结合这方面的知识和你的例外,你应该得出的结论是,你在- (NSInteger)tableView:(UITableView *)tableView_ numberOfRowsInSection:(NSInteger)section返回值是错误的,而且很可能是26,它应该是25

这是最常见的错误,与UITableView发生。

1

有趣的部分是[FBFriendsList tableView:heightForRowAtIndexPath:]这是你的代码(唯一)的一部分,这是这个堆栈跟踪的一部分,所以你必须在那里找到错误。

上面的行是对数组的访问以及抛出异常的结果进度。下面的代码是UIKit的基类,它们“托管”您的应用程序代码并负责在正确的时间调用正确的部分。

1

它看起来像行的FBFriendsList高度的回调传递一个NSIndexPath超出你的数组的界限。哪里有你的FBFriendsList你需要放置一个断点,并检查数组中的项目数量,并检查正在通过的NSIndexPath。