objective-c - iOS UIWebView - 陷阱异常加载无效文件格式

标签 objective-c ios exception exception-handling uiwebview

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

异常:CPMessageException:文件格式无效。

异常 CPMessageException: (null)

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

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

非常感谢, 乔纳森

最佳答案

不幸的是,CPMessageException 是 Apple 私有(private)框架的一部分,对于办公文件,OfficeImport.framework。当框架接收到一个不可用的文件时抛出。

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

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

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

在这里,您可以先发制人地阻止将文件加载到 Web View 中,从而避免出现毫 headless 绪的空白屏幕。

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

更新:刚刚提交了一个关于此的错误。让我们看看 Apple 开发人员对此有何评论。

关于objective-c - iOS UIWebView - 陷阱异常加载无效文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418742/

相关文章:

java - 如何告诉 Java 编译器不要提示某些没有被捕获或抛出的异常?

Python:在 double_scalars 中捕获运行时溢出

ios - 是否可以从 ios 通过 Google Firebase 发送一对一的 APNS

ios - UITextField iOS : how to deal with the dismiss keyboard button?

ios - 导航栏在详细 View 中消失 Swift

ios - UISegmentedControl.enabled = NO 不会使它变暗

iphone - 解除使用 loadNibNamed 加载的 NIB

objective-c - NSArray 中的空值

ios - Alamofire http json 请求 block ui

java - 这是异常处理滥用吗?