Я загружаю 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 секунд, установленных в таймере, я вижу только это сообщение: о создании TImer, After Timer и CALLING TO LOADREQUEST.
Любые идеи о том, как параллельно выполнять запрос параллельно с NSTimer? Как вы видите, отправка не работает, может быть, потому, что URL-адрес находится в одном комплекте?
Ну, пока я жду решения, приложение заморожено, просто ждет ответа ... который может занять время.
Использование таймаута в запросе не работает, потому что соединение установлено правильно, дело в том, что требуется много времени, чтобы получить ответ.
Спасибо, ребята!
Почему вы отправили запрос с '[NSURLConnection sendAsynchronousRequest]' в первую очередь? Если вы хотите выполнить javascript-метод на странице html, вы можете использовать '[UIWebView stringByEvaluatingJavaScriptFromString:]' – ozgur
Это всего лишь один из тех, кого я пытался, но это тот же эффект, что и в sendAsynch ... Я знаю о stringByEval. .. но случай тот же, как я могу остановить скрипт, если занимает больше X секунд? Является ли проблема, с которой я столкнулся (я обязательно обновлю код о sendAsynch на всякий случай) –