try and catch 未处理 iphone 中的异常

Posted

技术标签:

【中文标题】try and catch 未处理 iphone 中的异常【英文标题】:try and catch is not handling exception in iphone 【发布时间】:2012-01-16 07:31:43 【问题描述】:

当 ind.row 不是有效值或有时它变为 nil 时,我使用以下代码捕获错误

@try 
        if(ind.row<[[treeNode flattenElements] count])
        
            [self.mTableView scrollToRowAtIndexPath:ind atScrollPosition:UITableViewScrollPositionTop animated:YES];
        


    
    @catch (NSException *e) 
        NSLog(@"%@",e);

       

但是当这段代码执行时,有时会发生这个错误

Assertion failure in -[NSIndexPath row], /SourceCache/UIKit_Sim/UIKit-1262.60.3/UITableViewSupport.m:1948`

这个错误可能是什么原因以及为什么没有处理异常

【问题讨论】:

我不知道iphone,但是,我想你也应该加@catch (Exception *ee) NSLog(@"%@",ee); 你不应该一开始就试图捕捉断言失败。您的 NSIndexPath 创建不正确。 @KevinBallard 实际上我正在做的是在 textfielddidbeginediting 中我将该单元格的索引传递给名为 ind 的 ivar,由 ind=[[self.mTableView indexPathForCell:(UITableViewCell*)textField.superview] 保留] ;然后在键盘显示方法中,我使用上面的代码使文本字段在键盘出现时向上滚动,但这会给出这样的错误 【参考方案1】:

ios 中的断言不会引发异常,因此您无法捕获它们。

您将需要弄清楚您致电-row 时出了什么问题。我的第一个猜测是“ind”已经被释放了。

【讨论】:

【参考方案2】:

您必须自己检查索引、生成并引发异常:NSException Class Reference

+ (void)raise:(NSString *)name format:(NSString *)format, ...

【讨论】:

【参考方案3】:

实际上它已经在捕获异常...我已经在 objc 异常上设置了标志停止。当我删除它捕获异常时...。正如@stilesCrisis 所指出的那样,ind 值在这个例外..对不起 trble

【讨论】:

以上是关于try and catch 未处理 iphone 中的异常的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 iPhone 应用程序中的 try catch? [复制]

无法使用 try-catch 处理未处理的 Promise Rejection

qt中的全局try and catch块

Java中未处理的异常错误,即使使用try-catch也是如此

无法使用 try-catch 处理 SQL 异常 [重复]

捕获未处理的异常