2016-06-13 1 views
0

UIWebView의 대리자 메서드 webView:shouldStartLoadWithRequest:navigationType:에서 나는 NSAssert을 넣지 만 종료하는 대신 로그 만 출력합니다.NSAssert가 uiwebview 대리자 메서드에서 작동하지 않습니다.

- (BOOL)webView:(UIWebView *)webView 
shouldStartLoadWithRequest:(NSURLRequest *)request 
      navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSAssert(NO,@"assertion in delegate"); 
    return YES; 
} 

출력 :

은 *** 웹킷 웹보기에 잡히지 않은 예외 폐기 : decidePolicyForNavigationAction : 요청 : 프레임 : decisionListener : 대리인 : 여기 내 코드 대리인의 주장

+1

이 볼 http://stackoverflow.com/questions/7883899/ios-5-uiwebview-delegate-webkit-discarded-an-uncaught-exception-in-the-webview –

답변

0

NSAssert은 Objective-C 예외를 발생시키고 이러한 오류가 발견 될 수 있으므로 프로그램이 중단된다는 보장은 없습니다. 코드를 자체 코드에서 사용하는 것은 일반적으로 좋습니다만, 코드가 프레임 워크에 의해 호출되는 경우 (예 : 대리자가 호출 될 때)는 프레임 워크의 기능에 따라 다릅니다. WebKit에서 예외를 발견하고이를 버리거나 처리합니다.

간단한 해결책은 standard assert() function을 사용하는 것입니다. 이는 하나의 부울 표현식을 사용하고 표현식, 파일 이름 및 어설 션의 행 번호를 인쇄하는 프로그램을 중단합니다. 이 함수는 Objective-C 예외를 사용하지 않으며 standard abort() function을 사용하므로 catch 할 수 없습니다. 당신을하는 데 도움이되면 HTH

+0

감사! 그게 내 질문을 해결했다. –

0

실패 NSAssert가 ObjC 예외를 발생시킵니다. (NSInternalInconcistencyException 정확하게 말하십시오.) 누구든지 install exception handlers or other mechanisms을 사용하여 호출하는 코드에서 발생한 예외 상황을 정의 할 수 있습니다. 그리고 이러한 메커니즘은 프로세스 중단을 포함 할 필요가 없습니다 (예외가 일반적으로 좋은 아이디어가 아니더라도 계속됩니다).

콜백에서 ObjC 예외를 발생 시키면 실행이 결과로 종료된다는 보장은 없습니다. 호출 한 코드에서 설정 한 예외 처리가 무엇이든 상관 없습니다. 위임 코드의 일부 오류로 인해 전체 프로세스가 중단되기를 원한다면 abort() 자신에게 가장 좋습니다.

관련 문제