【问题标题】:try and catch is not handling exception in iphonetry and catch 未处理 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] 保留] ;然后在键盘显示方法中,我使用上面的代码使文本字段在键盘出现时向上滚动,但这会给出这样的错误

标签: iphone ios nsexception


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2011-04-10
        • 1970-01-01
        • 2017-02-23
        相关资源
        最近更新 更多