【问题标题】:iOS UIWebView - trap exceptions loading invalid file formatiOS UIWebView - 捕获加载无效文件格式的异常
【发布时间】:2012-05-12 05:19:52
【问题描述】:

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

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

异常 CPMessageException: (null)

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

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

非常感谢, 乔纳森

【问题讨论】:

  • 以上都没有触发,因为异常确实触发了。也许你可以使用 \@try ... \@catch 来解决这个问题。
  • 嗨,我已经尝试在 [webView loadRequest:] 方法周围使用@try..@catch,但没有发现异常。正如我所说,它实际上并不会导致应用崩溃。
  • 请转到产品 > 编辑方案.. > 诊断选项卡 > 勾选启用僵尸对象并向我们显示崩溃日志以及您的代码行已发生问题
  • 嗨,对不起,我已经这样做了,但没有崩溃日志,因为应用程序不会停止工作。执行的最后几行是: NSURL *sMyURL = [NSURL URLWithString:sLocalDocumentURL]; [uiwebDocumentView loadRequest:[NSURLRequest requestWithURL:sMyURL]];
  • 使用 abort() 强制崩溃(因此是崩溃日志)

标签: objective-c ios exception exception-handling uiwebview


【解决方案1】:

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

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

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

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

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

(我不确定是否有办法即时读取 NSLog 输出以便您可以监控它。但这可能不是正确的方法!)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2018-02-16
    • 1970-01-01
    • 2019-10-10
    • 2018-11-12
    相关资源
    最近更新 更多