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