只能在主執行緒呼叫
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
[webView stringByEvaluatingJavaScriptFromString:@"aaa"];
});
複製程式碼
//崩潰資訊
Tried to obtain the web lock from a thread other than the main thread or the web thread.
This may be a result of calling to UIKit from a secondary thread. Crashing now...
複製程式碼
崩潰產生的原因是你在主執行緒以外的執行緒呼叫了UIKit,系統在執行stringByEvaluatingJavaScriptFromString的時候呼叫了UIKit裡的一些方法,所以不允許在主執行緒之外的執行緒去呼叫這個方法。
解決方法也有很多可以用
[webView performSelectorOnMainThread:]
//或者
dispatch_async(dispatch_get_main_queue(), ^{
[webView stringByEvaluatingJavaScriptFromString:@"aaa"];
});
複製程式碼