iOS UIWebView - 捕获加载无效文件格式的异常

Jon*_*ham 5 exception-handling exception objective-c uiwebview ios

我有一个包含UIWebView的UIViewController,我用它来查看各种文档.偶尔可能会尝试加载UIWebView不支持的文档(例如旧的Excel 2.0工作表).目前,这会导致调试窗口中的输出如下:

exception:CPMessageException:文件格式无效.

EXCEPTION CPMessageException:(null)

触发webViewDidStartLoad方法,但不会触发webViewDidFinishLoad或didFailLoadWithError.

该错误不会使应用程序崩溃,但我想捕获此异常以便为用户提供我自己的消息.任何人都可以建议如何陷阱和处理这个?

非常感谢,乔纳森

Nan*_*ali 1

不幸的是,CPMessageException 是 Apple 私有框架的一部分,对于 Office 文件,是 OfficeImport.framework。当框架收到不可用的文件时会抛出此错误。

您的应用程序没有崩溃的原因是因为它可能是在导入代码本身中处理的。即使设置 NSSetUncaughtExceptionHandler 也不起作用(正如我过去尝试过的那样)。

解决这个问题的最佳方法是使用 UIWebView 的 shouldStartLoadWithRequest 委托方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
Run Code Online (Sandbox Code Playgroud)

在这里,您可以先发制人地停止将文件加载到 Web 视图中,并避免出现毫无头绪的空白屏幕。

(我不确定是否有一种方法可以动态读取 NSLog 输出,以便您可以监视它。但这可能不是正确的方法!)

更新:刚刚提交了一个与此相关的错误。让我们看看苹果开发者对此有何评论。