delegate failed to return after waiting 10 seconds:自定义UIWebView缓冲加载数据失败崩溃

来源:互联网 发布:淘宝开发,用的什么软件 编辑:程序博客网 时间:2024/05/23 11:35

   对UIWebView的使用还不太熟悉,刚开始用,loadHTLMstring是没有问题的,正常解析显示HTML字符内容,

但由于项目要求,需要对UIWebView做自定义修改,需求如下


其中的图片以及标题栏并非HTML本身的内容,而是要求自己添加的,

注意一点:自定义的内容要随uiwebview滑动,需要把内容添加到_myWebView.scrollView 如下:

- (void)layoutNavButton{

    //添加备图和分割线

    [_myWebView.scrollViewaddSubview:standbyImage];

    [_myWebView.scrollViewaddSubview:line];

}

为了添加的东西不会把HTML内容遮住,需要头部留空白,直接修改要显示的HTML字符,在开头插入

<div style='height:161px'> </div> 标示留空白高度为161    

        

以上达到需求的基本目的了,但问题来了,图片加载方面,刚开始我用了图片缓冲的方法加载图片:EGOImageView带异步加载图片并缓存功能

EGOImageView *mImage = [[EGOImageViewalloc] initWithFrame:CGRectMake(0,0, self.frame.size.width,110)];

       mImage.placeholderImage = [UIImageimageNamed:@"nopic.png"];

        mImage.imageURL = [NSURLURLWithString:information_group_image];

添加图片后,打开uiwebview,程序崩溃!!!!!!!

报错信息:

void SendDelegateMessage(NSInvocation*): delegate (webView:webViewDidFinishLoad:) failed to return after waiting 10 seconds. main run loop mode...

mImage删除后就不会崩溃,说明就是图片的问题,原因是EGOImageView加载图片是异步加载,有缓冲的效果,可能是(我也不确定是否正确)uiwebview加载HTML的方法

loadHTMLStringbaseURL: 不允许有异步进程。。。。。


修改方法:直接用nsdata下载图片,然后直接扔到uiwebview里面去,其实这是最笨的方法了,但起码解决问题了。。。。代码如下

//此处加到webviewscrollview里面的图片,不能用缓冲机制,会loadfailed导致崩溃

            NSData *data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:[jsonDict objectForKey:@"information_image"]]];

           UIImageView *imageV = [[UIImageViewalloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width,PIGHEIGHT)];

            [imageVsetImage:[UIImageimageWithData:data]];

           if ([jsonDict toString:@"information_details"] !=nil && ![[jsonDict toString:@"information_details"] isEqualToString:@""]){

                tempstr =@"<div style='height:161px'> </div>";

               NSString *HTMLString = [tempstrstringByAppendingString:[jsonDict toString:@"information_details"]];

                [_myWebViewloadHTMLString:HTMLString baseURL:nil];

               if (imageV.image !=nil) {

                    [_myWebView.scrollViewaddSubview:imageV];

                }

                

            }

}

这样就不崩溃了,至于图片能不能下载下来,就看网络情况了。






0 0