bool _WebTryThreadLock(bool)崩溃

时间:2017-05-22 07:48:33

标签: ios objective-c uitableview webview

我在App崩溃跟踪工具中看到了一些崩溃。基本上我有一个tabBarController,其中一个选项卡有一个嵌入式UIWebView,另一个选项卡有一个带UITableView的控制器。那么当用户首先进入WebView并开始加载时,会发生几秒钟后他们转到tableView控制器,随机发生崩溃。

根据我在崩溃日志中看到的时间判断,当用户点击UITableView选项卡时,似乎webView即将完成加载,因此我将代码插入到didFinishLoading中。这样我就可以可靠地重现崩溃。代码如下所示:

webViewController:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [tabBarController gotoTableViewController];
}

tableViewController:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.tableView reloadData];
}

这是崩溃:

bool _WebTryThreadLock(bool), 0x1700113d0: Multiple locks on web thread not allowed! Please file a bug. Crashing now...

我不知道我能做些什么,似乎webView和tableView都锁定了mainThread?有没有办法去卸货"从主线程加载webView?我试过stopLoading,不工作......

2 个答案:

答案 0 :(得分:1)

找到它。它确实是由mainThread上的文件解析引起的。我的文件解析是利用NSRunLoop来解析XML文件。但是,该文件旨在用作缓存值,需要同步解析,因此我将其放在mainThread上。我试图将它放到后台线程并使用dispatch_sync,崩溃仍在那里。所以我用dispatch_async尝试dispatch_semaphore_t,崩溃消失了!

答案 1 :(得分:0)

我遇到了同样的问题,而且我还有一个NSRunLoop可能会在WebView获取数据时运行。 删除NSRunLoop问题现在已修复,但我不明白为什么问题首先发生。 @KKRocks你能详细说明为什么NSRunLoop会导致WebView在后台运行吗?