2011-01-31 5 views
1

어딘가에 버그가 있다는 것을 알고 있습니다 ... 저는 아주 간단한 버그입니다. 실제로는 범위를 벗어나는 인덱스 일뿐입니다. 나는 사냥하고 어디에 내 프로젝트에서 중단 점을 배치하는 데 사용됩니다. 하지만 오늘은 영리하고 실제로 오류 메시지를 읽는 법을 배우기로 결정했습니다. 왜냐하면 그것이 전부라는 것을 알고 있기 때문입니다! 그러나 나는 그것을 읽는 법을 모른다, 나는 인터넷 검색을 시도했다. 그리고 나에게는 좋은 설명을주는 것처럼 보이지 않는다!객관적인 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 

편집 : 그래서 몇 분 당신이이 tableView:heightForRowAtIndexPath: 기능에있어 말했듯이 나는 ... 버그를 발견 질문을 게시 한 후. 그러나 내가 정말로 알고 싶었던 것은이 스택 추적에서 문제를 일으키는 라인을 추측 할 수 있습니까?

+0

그냥 스택 추적입니다 - 분명히 FBFriendsList에서 NSArray의 끝을 넘어 요소에 액세스하려고했습니다. –

+0

스택 추적에서 회선 번호를 유추 할 수 있습니까? –

답변

1

읽을 거리가별로 없습니다. 평상시처럼 스택 추적만으로도 버그를 수정하는 데 도움이되지 않습니다.

이 버그의 경우 UITableViewDatasource 프로토콜을 이해해야합니다.

오류는 -[FBFriendsList tableView:heightForRowAtIndexPath:]에 의해 발생합니다. 해당 높이를 반환하기 때문에 데이터 배열의 요소에 액세스하려고 할 가능성이 가장 큽니다.

귀하의 예외와 함께 UITableViewDatasource에 대한 지식을 결합하십시오.
데이터 소스에 대한 지식은 tableview가 현재 볼 수있는 모든 셀에 대해 heightForRowAtIndexPath를 요청한다는 것을 알려줍니다.
또한 테이블 뷰에 액세스해야하는 행 수를 알려 줬음을 알려야합니다.

이 지식을 결합하여 예외는 당신이 - (NSInteger)tableView:(UITableView *)tableView_ numberOfRowsInSection:(NSInteger)section에 반환 값이 잘못하고 25

이 가장 일반적인 버그가 있어야 할 곳에는 26의 가능성이 높습니다 결론에 도달해야하는 경우 그 UITableView 함께 발생합니다.

1

재미있는 부분은이 스택 추적의 일부인 코드의 (유일한) 부분 인 [FBFriendsList tableView:heightForRowAtIndexPath:]이므로 오류를 찾기 위해 거기를 봐야합니다.

위의 줄은 배열에 대한 액세스와 그 예외가 발생하는 진행 상황입니다. 아래 줄은 애플리케이션 코드를 "호스트하는"UIKit의 기본 클래스이며 적시에 올바른 파트를 호출해야합니다.

1

행의 FBFriendsList 높이에 대한 콜백이 배열의 범위를 벗어나는 NSIndexPath를 전달하는 것처럼 보입니다. FBFriendsList가있는 곳에서는 중단 점을 넣고 배열의 항목 수를 확인하고 전달되는 NSIndexPath를 확인해야합니다.

관련 문제