我正在加載一個位於我的應用程序中的JavaScript,腳本將嘗試查找解決方案,這可能需要一些時間。我不想等待超過5秒的解決方案,在這種情況下,我只想停止請求並向用戶顯示一條消息。dispatch_async UIWebView loadrequest
我一直在嘗試使用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()
...
...
當我運行應用程序時,即使在設置定時器5秒後,進程仍在運行,我只看到這個meesage:關於創建TImer,定時器之後和調用LOADREQUEST。
有關如何與NSTimer同時並行運行請求的任何想法?正如你所看到的那樣,派遣不起作用,也許是因爲這個URL在同一個Bundle中?
那麼,在此期間,我正在等待解決方案,應用程序被凍結,只是等待答案...這可能需要很長時間。
在請求中使用超時無法正常工作,因爲連接建立正確,問題是需要很長時間才能收到答案。
謝謝你!
爲什麼你首先發送一個帶有[[NSURLConnection sendAsynchronousRequest]]的請求?如果你想在html頁面中執行一個javascript方法,你可以使用'[UIWebView stringByEvaluatingJavaScriptFromString:]' – ozgur 2015-02-08 01:45:46
這只是我正在嘗試的一種行爲,但是沒有sendAsynch也是同樣的效果......我知道關於stringByEval。 ..但情況是相同的,如果超過X秒,我該如何停止腳本?是我面臨的問題(我會更新有關sendAsynch的代碼以防萬一) – 2015-02-08 01:48:11