[英]dispatch_async UIWebView loadrequest
我正在加載應用程序中的javascript,腳本將嘗試找到解決方案,這可能需要一些時間。 我不想等待超過5秒的時間來解決該問題,在那種情況下,我只想停止請求並向用戶顯示一條消息。
我一直在嘗試使用NSTimers和dispatch_async進行操作,但是UIWebView請求仍在使用我的整個主隊列,而NSTimer在等待答案的同時停止了。
請求調用:
webViewUIView.delegate = self
var path = NSBundle.mainBundle().pathForResource("page", ofType: "html")
var url = NSURL(fileURLWithPath: path!)
var req = NSURLRequest(URL:url!)
var queue = NSOperationQueue()
dispatch_async(dispatch_get_main_queue()) {
println("********CALLING TO LOADREQUEST")
self.webViewUIView.loadRequest(req)
}
還有我的NSTimer:
var timer2 = NSTimer()
func webViewDidStartLoad(webView: UIWebView) {
println("********Creating the Timer")
let aSelector : Selector = "cancelWeb"
self.timer2 = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: aSelector, userInfo: nil, repeats: false)
println("After create the timer")
}
cancelWeb:
func cancelWeb(){
println("****Before Stop Load")
webViewUIView.stopLoading()
println("After stopLoading")
timer2.invalidate()
}
我的webViewDidFinishLoad:
func webViewDidFinishLoad(webView: UIWebView) {
webViewUIView.stringByEvaluatingJavaScriptFromString("func('\(obj)')")
let result: String = webViewUIView.stringByEvaluatingJavaScriptFromString("document.getElementById('log').innerText")!
timer2.invalidate()
...
...
當我運行該應用程序時,即使在Timer中設置了5秒后,該過程仍在運行,我只看到以下消息:關於創建TImer,After Timer和調用加載請求。
關於如何與NSTimer同時並行運行請求的任何想法? 如您所見,調度無法正常工作,可能是因為URL在同一個Bundle中?
好吧,在此期間,我正在等待解決方案,該應用程序被凍結,僅在等待答案...這可能需要很長時間。
在請求中使用超時無法正常工作,因為正確建立了連接,原因是要花很長時間才能收到答案。
謝謝伙計們!
您的代碼中缺少另一個UIWebView委托func。 您可能要在其中添加timer2.invalidate()
func webView(_ webView: UIWebView,
didFailLoadWithError error: NSError)
好的,我用我的Javascript代碼創建了一個Worker,所以我可以像處理新線程一樣處理它,但不能在iOS中處理(使用UIWebView是不可能的)。 解決方案在這里: iOS()()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.