Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iphone dev - how to catch exception 'NSRangeException'

In my app I try to scroll a UITableView to the top once after I updated the content of the table. However, under some circumstance, my table is EMPTY. So I got the following exception:

Terminating app due to uncaught exception 'NSRangeException', reason: '-[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]: row (0) beyond bounds (0) for section (0).'

how can I catch this exception? I tried

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

if (indexPath != nil) {
    [EventTable scrollToRowAtIndexPath:indexPath
                atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

but it doesn't catch the exception because indexPath is not nil.

like image 535
Brian Avatar asked May 19 '10 17:05

Brian


2 Answers

Before scrolling to an IndexPath, check your UITableView to make sure the row and section you're trying to scroll to are less than the number of rows and section in your table, respectively. If so, do not try to scroll to that IndexPath.

if ( [tableView numberOfSections] < section || [tableView numberOfRowsInSection] < row )
like image 158
Tom S Avatar answered Oct 16 '22 16:10

Tom S


Exception handling takes a different path than your typical flow control expressions. Apple has written up a useful article on Objective-C Exception Handling. Essentially you'll want to wrap your code in @try/@catch blocks. It is in the @catch block where you will receive the exception and perform the appropriate next steps in your code.

like image 37
fbrereto Avatar answered Oct 16 '22 16:10

fbrereto