我已经读过重用UIWebViews是一种不好的做法。我在工作中继承的一些代码将各种内容推送到UIWebView。 Powerpoint,Word文档和视频。这一切在正常情况下都可以正常工作。当我们过快地切换UIWebView中的内容时,它会转储。
我的webView被设置为属性。它很好地融入了IB。从我们的tableView正常选择加载本地内容就好了。它需要快速选择相同的单元格或多个组合才能使其崩溃。
我可以为webViewDidFailWithError捕获一些错误消息。但即使没有崩溃,这些也会触发。 这是错误的本地化字符串。
The operation couldn’t be completed. (NSURLErrorDomain error -999.)
当应用程序最终崩溃时,它会破坏这个愚蠢的WebCore错误。
如果有人有任何链接或一些代码示例如何处理这个我会很感激。也许是一个例子,如何最好地重用我的webView属性而不会搞砸。
我会加载一些代码,但有很多与webView本身无关。所有推送到webView的内容都是通过[self.webView loadRequest:request];
完成的,请求是NSURLRequest,其中填充了本地内容的路径。
如果有人能帮我解决这个问题,我将非常感激。手指越过简单的东西。
答案 0 :(得分:2)
我不确定这种方式是解决问题的“最佳”方式,但它似乎确实运作良好。简短,甜美,有效。
我使用tableView禁用了userInteraction,后者更新了webView中的内容。因为你必须将它混合在一起,所以在这里或那里错过一个水龙头可能不会错过。所以现在,这是修复。
#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];
}
答案 1 :(得分:1)
如果它只是在您快速点击时崩溃,您是否可以在其上放置手势识别器以充当穷人的速率限制器?
答案 2 :(得分:0)
您是否在加载其他请求之前使用[webview stopLoading];
?您可能需要做的是在尝试加载其他加载之前取消或停止当前加载。另一个选项是限制用户输入。
答案 3 :(得分:0)
在您的UIWebViewDelegate中,如果已加载请求,您可以实施webView:shouldStartLoadWithRequest:navigationType:
以返回NO
。
答案 4 :(得分:0)
我不禁想到你最好不要重新使用UIWebView。抛弃笔尖,以编程方式创建它并将其设置为nil,并在数据源更改时重新创建/重新分配/重新分配它。
另一方面,我会确保使用NSOperationQueue进行数据加载。