重用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进行数据加载。