簡體   English   中英

dispatch_async UIWebView loadrequest

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM