iphone开发 - 如何捕获异常'NSRangeException'

时间:2010-05-19 17:18:06

标签: iphone uitableview scroll

在我的应用程序中,我尝试在更新表格内容后将UITableView滚动到顶部一次。但是,在某些情况下,我的桌子是EMPTY。所以我得到以下例外:

  

由于未捕获的异常'NSRangeException'而终止应用程序,原因:' - [UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]:row(0)超出section(0)的section(0)。'

我怎么能抓住这个例外?我试过了

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

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

但它没有捕获异常,因为indexPath不是nil。

2 个答案:

答案 0 :(得分:12)

在滚动到IndexPath之前,请检查UITableView以确保您尝试滚动到的行和部分分别小于表中的行数和部分数。如果是这样,请不要尝试滚动到该IndexPath。

if ( [tableView numberOfSections] < section || [tableView numberOfRowsInSection] < row )

答案 1 :(得分:6)

异常处理采用与典型流控制表达式不同的路径。 Apple在Objective-C Exception Handling上撰写了一篇有用的文章。基本上,您需要将代码包装在@try / @catch块中。它位于@catch区块,您将收到异常并在代码中执行相应的后续步骤。