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") } 

ОтменитьWeb:

 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-адрес находится в одном комплекте?

Ну, пока я жду решения, приложение заморожено, просто ждет ответа … который может занять время.

Использование тайм-аута в запросе не работает, потому что соединение установлено правильно, дело в том, что требуется много времени, чтобы получить ответ.

Спасибо, ребята!

2 Solutions collect form web for “dispatch_async UIWebView loadrequest”

В вашем коде отсутствует еще одна функция делегата UIWebView. Вы можете добавить timer2.invalidate() в

 func webView(_ webView: UIWebView, didFailLoadWithError error: NSError) 

Хорошо, ребята, я создал Рабочего в моем Javascript-коде, поэтому я могу обрабатывать его как новые потоки, но не в iOS (что было невозможно сделать с помощью UIWebView). Решение находится здесь: iOS Javascript Workers Высокий процессор после завершения ()

  • DOMException 105 только во время тестирования пользовательского интерфейса
  • Как удалить заднюю тень в UIWebView при загрузке PDF в swift
  • window.orientation не работает в UIWebView
  • UIView Animation сбрасывает вид на исходный прямоугольник
  • Как использовать метод toStartLoadWithRequest для UIWebView Delegate
  • Открытие нового UIViewController при нажатии ссылки на UIWebView
  • Код фрагмента для использования сложного JavaScript для вставки HTML внутри UIWebView?
  • Загрузите изображения из UIWebView
  • Инвертировать цвета в UIWebView или UITextView
  • UIWebview удаляет дополнение / маржу
  • Как вызвать функцию JavaScript в объекте C
  • Можно ли использовать UIWebView / WKWebView для загрузки динамического контента в UITableViewCell?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.