【问题标题】:UIWebView getting crashedUIWebView 崩溃
【发布时间】:2012-06-16 06:29:33
【问题描述】:

我有一个UIWebView,它将加载文档。为 webview 提到的所有支持的文档都在工作。但有时,每当我快速来回移动时,UIWebView 就会崩溃。我的意思是我一次又一次地点击返回并打开文件。如果我这样做了,我的应用就会崩溃。

知道为什么会这样吗?它在处理视频、音频和 txt 文件时效果很好,但对于 Office 文档和数字、页面文件来说却是奇怪的崩溃。

请帮帮我!!

-(void) backBtnPressed
{
    [_webView stopLoading];
    if ([_webView superview])
    {      
        [_webView removeFromSuperview];
        self.navigationItem.rightBarButtonItem = nil;
    }
}

- (void) loadFile:(NSString*)filePath
{
    NSURL*  url = [NSURL fileURLWithPath:filePath];
    NSURLRequest*   request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];
    [webView setScalesPageToFit:YES];
}

【问题讨论】:

  • 在发布之前是否将webview的delegate属性设置为nil
  • @mvds - 为什么这不是一个答案:)
  • 我没有设置像 webview.deleget = self; 这样的委托当我移动到另一个视图控制器时,我也在释放 webview。我正在从同一个视图控制器打开文件。我做错什么了吗?
  • 您的文档过大意味着 > 2 mb ?
  • Nope.Everything 小于 1 MB ,甚至

标签: iphone objective-c ios cocoa-touch uiwebview


【解决方案1】:

在控制器的 dealloc 中将 webview 的 delegate 属性设置为 nil

【讨论】:

  • 我没有设置像 webview.deleget = self; 这样的委托当我移动到另一个视图控制器时,我也在释放 webview。我正在从同一个视图控制器打开文件。我做错什么了吗?
  • 我正在使用 removefromsuperview 并停止加载返回
【解决方案2】:

如果您要从一个视图控制器移动到另一个视图控制器,请执行以下操作

[webView stopLoading];
webView.delegate = nil;

【讨论】:

  • 我没有转移到其他视图控制器。我在同一个视图控制器中。
  • 我正在使用 removefromsuperview 并停止加载
【解决方案3】:

执行此操作并检查您遇到的错误。

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    {
       NSLog("Error=%s",error);
    }

【讨论】:

  • 是的,我已经添加了。不打印错误日志。但是在调试区域我可以看到这个 EXCEPTION CPMessageException: (null)
  • 复制您的url 并将其粘贴到您的浏览器中并检查它是否正常工作?
  • 没有。我从本地文件路径而不是从网络打开文件
  • 该文件(url)是否存在于iPhone模拟器路径中?
【解决方案4】:

问题解决。将 UIWebView 设置为 nil 并在 WebView 中再次加载请求。但现在最多只能是应用程序崩溃的最坏情况。

【讨论】:

    【解决方案5】:

    试试这个:

    -(void)viewWillDisappear:(BOOL)animated
        {
            if([webView isLoading])
            {
                [webView stopLoading];
            }
        }
    

    【讨论】:

      【解决方案6】:

      尝试执行以下操作。它对我有用。

      [webView stopLoading];
      [webView release];
      webView = nil;
      webView.delegate = nil;
      

      【讨论】:

        【解决方案7】:

        如果其他人犯了同样的初学者错误,只需在此处添加此内容:

        请记住,webView.delegate 是一个弱引用。如果您将其设置为 self 以外的其他值,如果没有其他对它的引用,您的委托可能会被销毁,这将导致各种崩溃。

        【讨论】:

          猜你喜欢
          • 2010-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-13
          • 1970-01-01
          相关资源
          最近更新 更多