首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSAssert不适用于uiwebview委托方法

NSAssert不适用于uiwebview委托方法
EN

Stack Overflow用户
提问于 2016-06-13 03:46:48
回答 2查看 122关注 0票数 0

在UIWebView的委托方法webView:shouldStartLoadWithRequest:navigationType:中,我在其中放置了一个NSAssert,但是它只是输出一个日志,而不是终止。这是我的代码:

代码语言:javascript
复制
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
            navigationType:(UIWebViewNavigationType)navigationType
{
    NSAssert(NO,@"assertion in delegate");
    return YES;
}

以及产出:

* webView:decidePolicyForNavigationAction:request:frame:decisionListener:委托中的WebKit丢弃了一个未察觉的异常:委托中的断言

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-13 17:23:05

NSAssert引发了一个Objective异常,这些异常可能会被捕获,因此它不能保证程序将被中止。在您自己的代码中使用它通常是可以的,但是如果您的代码是由框架调用的--比如调用委托时--这取决于框架所做的事情。正如您已经发现的,WebKit捕获异常并丢弃或自行处理它们。

简单的解决方案是使用函数。这需要一个布尔表达式,并将中止输出断言的表达式、文件名和行号的程序。此函数不使用Objective异常,它使用函数,因此无法捕获。

HTH

票数 0
EN

Stack Overflow用户

发布于 2016-06-13 05:00:02

失败的NSAssert引发ObjC异常。(准确地说,是NSInternalInconcistencyException。)任何人都可以安装异常处理程序或其他机制来定义在它们调用的代码中引发的异常发生了什么。而且,这些机制不一定包括停止进程(尽管在异常之后继续进行通常不是一个好主意)。

当您在回调中引发ObjC异常时,无法保证执行会因此而终止--无论调用您的代码设置了什么异常处理,您都可以随意处理。如果您想让整个过程因为委托代码中的一些失败而崩溃,最好自己来abort()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37781529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档