В моем приложении я пытаюсь прокрутить UITableView к вершине однажды после того, как я обновил содержание таблицы. Однако при некотором обстоятельстве, моя таблица ПУСТА. Таким образом, я получил следующее исключение:
Завершение приложения из-за неперехваченного исключения 'NSRangeException', причина: '-[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]: строка (0) вне границ (0) для раздела (0).'
как я могу поймать это исключение? Я попробовал
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
if (indexPath != nil) {
[EventTable scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
но это не ловит исключение, потому что indexPath не является нолем.
Перед прокруткой до IndexPath проверьте свой UITableView, чтобы убедиться, что строка и раздел, до которого вы пытаетесь прокрутить, меньше, чем количество строк и раздел в вашей таблице, соответственно. Если это так, не пытайтесь перейти к этому IndexPath.
if ( [tableView numberOfSections] < section || [tableView numberOfRowsInSection] < row )
Обработка исключений идет по пути, отличному от типичных выражений управления потоком. Apple написала полезную статью о Objective-C Exception Handling. По сути, вам нужно обернуть ваш код в блоки @try
/@catch
. Именно в блоке @catch
вы получите исключение и выполните соответствующие дальнейшие действия в коде.