在UIWebView的委托方法webView:shouldStartLoadWithRequest:navigationType:
中,我在那里放了一个NSAssert
,但它只输出一个日志,而不是终止。这是我的代码:
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
NSAssert(NO,@"assertion in delegate");
return YES;
}
和输出:
*** WebKit在webView中丢弃了一个未捕获的异常:decisionPolicyForNavigationAction:request:frame:decisionListener:delegate:assertion in delegate
答案 0 :(得分:0)
失败NSAssert
提出ObjC例外。 (确切地说NSInternalInconcistencyException
。)任何人都可以install exception handlers or other mechanisms来定义在他们调用的代码中引发的异常会发生什么。而且这些机制不必包括停止过程(尽管在异常后继续通常不是一个好主意)。
当您在回调中引发ObjC异常时,您无法保证执行将因此而终止 - 您将受到调用您的代码设置的任何异常处理的支配。如果由于委托代码中的某些失败而导致整个过程崩溃,那么最好自己abort()
。
答案 1 :(得分:0)
currentSht.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(erow, ecol)), , xlYes).Name = "Table1"
Set lst = currentSht.ListObjects("Table1")
lst.ListColumns.Add Position:=3
currentSht.Range("C2").Value = "=TEXT([@[Entry Time]],""mmm-d"")"
lstHeaders = Array("", "ID", "Agent Name", "Date", "Clock In", "Clock Out")
For i = 1 To 5
lst.ListColumns(i).Name = lstHeaders(i)
Next i
***Concerning portion of code***
For i = erow to 1 step -1
if cells(i,3).TEXT = "Jan-0" Then
cells(i,3).Value = "=([@[Clock Out]],""mmm-d"")"
end if
next i
End Sub
引发了一个Objective-C异常并且可以捕获这些异常,因此它不能保证您的程序将被中止。在您自己的代码中使用它通常很好,但如果您的代码由框架调用 - 例如在调用委托时 - 它取决于框架的功能。正如您所发现的,WebKit会捕获异常并丢弃或自行处理它们。
简单的解决方案是使用standard assert()
function。这将采用单个布尔表达式,并将中止程序打印出断言的表达式,文件名和行号。此函数不使用Objective-C异常,它使用standard abort()
function,因此无法捕获。
HTH