Я загружаю 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")
}
Веб-сайт отмены:
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:]
- person ozgur   schedule 08.02.2015