重用UIWebView导致崩溃

我读过,重用UIWebViews是一种不好的做法。 我在工作中inheritance的一些代码将各种内容推送到UIWebView。 Powerpoint,Word文档和video。 这一切正常情况下工作正常。 当我们快速切换出UIWebView中的内容时,它会转储。

我的webView被设置为一个属性。 它很好地连接到IB。 正常select从我们的tableView加载本地内容就好了。 它需要快速select相同的单元格或多个组合以使其崩溃。

我可以为webViewDidFailWithError捕获一些错误消息。 但是,即使没有崩溃,这些也会触发。 这是错误本地化的string。

The operation couldn't be completed. (NSURLErrorDomain error -999.) 

当应用程序最终崩溃时,它吹起了这个愚蠢的WebCore错误。

应用程序崩溃图像

如果任何人有任何链接或一些代码示例如何处理,我将不胜感激。 也许一个例子如何最好地重用我的webView属性,而不是吹了东西。

我会加载一些我的代码,但是有很多事情与webView本身没有关系。 所有被推送到webView的内容都是通过[self.webView loadRequest:request]; 请求是一个NSURLRequest,填充本地内容的path。

如果有人能帮我解决这个问题,我会非常感激。 手指越过简单的东西。

我不确定这种方式是解决问题的“最佳”方法,但似乎工作得很好。 简短,甜蜜,它的作品。

我禁用了更新webView内容的tableView的userInteraction。 既然你必须这么捣蛋,那么在这里或者那里丢失一个水龙头可能不会错过。 所以现在,这是修复。

 #pragma mark - #pragma mark UIWebViewDelegate methods -(void)webViewDidStartLoad:(UIWebView *)webView { [self.tableView setUserInteractionEnabled:NO]; } -(void)webViewDidFinishLoad:(UIWebView *)webView { [self.tableView setUserInteractionEnabled:YES]; } // I re-enable on load failures as they can block you out entirely on fail -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { [self.tableView setUserInteractionEnabled:YES]; } 

如果只在快速点击的时候才会崩溃,那么您是否可以将手势识别器作为穷人的速率限制器?

你使用[webview stopLoading]; 加载另一个请求之前? 你可能需要做的是取消或停止当前加载之前,试图加载一个不同的。 另一个选项是限制用户input。

在您的UIWebViewDelegate中,您可以实现webView:shouldStartLoadWithRequest:navigationType:如果已经有请求加载,则返回NO

我忍不住想你最好不要重新使用UIWebView。 抛弃笔尖,以编程方式创build它,并将其设置为零,并在数据源更改时重新创build/重新分配/重新分配。

在不同的说明中,我将确保使用NSOperationQueue进行数据加载。