Ios 重用UIWebView会导致崩溃

Ios 重用UIWebView会导致崩溃,ios,ipad,uiwebview,Ios,Ipad,Uiwebview,我已经读到重用UIWebViews是一种不好的做法。我在工作中继承的一些代码正在将各种内容推送到UIWebView。Powerpoints、Word文档和视频。这一切在正常情况下都可以正常工作。当我们切换UIWebView中的内容太快时,它会转储 My webView被设置为属性。它与IB连接得很好。从我们的tableView中进行的常规选择可以很好地加载本地内容。需要快速选择相同的单元或多个单元的组合,才能使其崩溃 我可以为webViewDidFailWithError捕获一些错误消息。但即使

我已经读到重用UIWebViews是一种不好的做法。我在工作中继承的一些代码正在将各种内容推送到UIWebView。Powerpoints、Word文档和视频。这一切在正常情况下都可以正常工作。当我们切换UIWebView中的内容太快时,它会转储

My webView被设置为属性。它与IB连接得很好。从我们的tableView中进行的常规选择可以很好地加载本地内容。需要快速选择相同的单元或多个单元的组合,才能使其崩溃

我可以为webViewDidFailWithError捕获一些错误消息。但即使不发生碰撞,它们也会触发。 这是错误本地化字符串

The operation couldn’t be completed. (NSURLErrorDomain error -999.)
当应用程序最终崩溃时,它会因为这个愚蠢的WebCore错误而崩溃

如果任何人有任何链接或一些代码示例如何处理这一点,我将不胜感激。也许可以举一个例子,说明如何最好地重用我的webView属性而不破坏它

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


如果有人能在这件事上帮助我,我将非常感激。为一些简单的事情祈祷。

您正在使用
[webview stopLoading]在加载另一个请求之前?您可能需要做的是在尝试加载其他加载之前取消或停止当前加载。另一个选项是限制用户输入

如果它只有在你快速点击时才会崩溃,你能在它上面放一个手势识别器来充当穷人的限速器吗?

我不确定这种方法是解决问题的“最佳”方法,但它看起来确实工作得很好。短,甜,而且有效

我禁用了与更新webView中内容的tableView的用户交互。因为你必须在上面捣碎这么多,错过一个水龙头这里或那里可能不会错过。所以现在,这是解决办法

#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]; 
}

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

我忍不住认为您最好不要使用UIWebView。丢弃nib,以编程方式创建它,并将其设置为nil,然后在数据源更改时重新创建/重新分配/重新分配它


另一方面,我会确保使用NSOperationQueue加载数据。

也许您应该在webView加载请求时阻止用户交互。这可能是可能的,但不确定我们的客户端是否会这样做。我会考虑的。谢谢。你用
@try{}@catch{}
试过了吗?UIWebView是否应该只在主线程上处理?我试过让[self.webView停止加载];在我调用新的loadRequest之前,它仍然崩溃,但没有任何区别。听起来问题就在这个范围内。如果它只是在您快速点击时崩溃,那么问题就在于多个请求。至于限制用户输入,在加载完成之前不必这样做。你可以试着忽略触摸半秒或整秒,看看这是否能解决问题。是的,我相信它能解决问题。但这并不能真正解决问题。我能很快地敲打它,它能撑得住。实际上,只有不切实际的敲击才会崩溃。如果可能的话,工作人员希望我找出如何防止撞车。谢谢你的洞察力。这里有更多的信息给你。我用webView创建了一个项目,并创建了两个按钮,在两个不同的请求之间切换。我以最快的速度拍打它们,并将它们拍打在一起,但它从未崩溃。在模拟器和设备上都执行了此操作。我们正在设备上加载保存的内容。Word文档、PDF、Powerpoints。我在2.pptx文件之间来回切换。谢谢你的努力。我可以点击相同的按钮,一遍又一遍地重新加载相同的文件,效果非常好。但是如果我的速度足够快,它最终会崩溃。在tableView上的手势识别器-DidSelectRowatineXpath?在触发请求的任何视图上,这样您就不会太频繁地发送请求。谢谢您的建议。不幸的是,我在这件事上束手无策。我们确实找到了解决办法。我们正在创建一个UIView,其进度指示器显示它仍在加载,并防止用户过载webview。它有效,顾客满意,这是我所希望的。谢谢你的建议。