Ошибка при попытке вызвать функцию js в веб-представлении на Swift5 - PullRequest
0 голосов
/ 01 октября 2019

У меня проблема, когда я нахожусь в середине веб-представления.

Веб-представление выглядит нормально, и нет проблем с вызовом функции js, который запускается при загрузке веб-представления.

Проблема возникает, когда вы пытаетесь вызвать функцию откуда-то еще. Мы не можем найти проблему.

Запрос функции Другой Screen.swift

DispatchQueue.main.async {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let myWebView = storyboard.instantiateViewController(withIdentifier: "mainWebViewController") as! mainWebViewController
                            myWebView.sendToCode(jsonString)
}

WebView.Swift

 @IBOutlet var mainWebView: WKWebView!
...

    func sendToCode(_ result : String) {
        mainWebView.evaluateJavaScript("calljsfunc(\(result))", completionHandler: { (any, err) -> Void in
            print(any ?? "no any")
            print(err ?? "no Error")
        })
    }

В разделе 'mainWebView.evaluateJavaScript' возникает ошибка.

Ошибка в потоке 1: неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения

erros

Что называется nil

, но я могу получить результат нормально, даже если я не добавлю результатзначение ошибки одинаково. В чем проблема? Как мы можем это исправить?

Заранее спасибо

1 Ответ

0 голосов
/ 01 октября 2019

Я думаю, что это был вид, а не просто файл для вызовов функций, как сказано в комментарии. Поэтому я решил проблему, сохранив текущее значение URL-адреса в локальном хранилище и перезагрузив веб-представление.

Запрос функции Other Screen.swift

DispatchQueue.main.async {
   self.callJsfunc()
}
    func callJsfunc() {
        let appDelegate = UIApplication.shared.delegate as? AppDelegate
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let moveScreen = storyboard.instantiateViewController(withIdentifier: "mainWebViewController") as! mainWebViewController
        moveScreen.modalPresentationStyle = .overCurrentContext
        moveScreen.modalTransitionStyle = .crossDissolve
        appDelegate?.window?.rootViewController = moveScreen
    }

WebView.Swift

            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                self.sendToInAppCode(self.Result)
                self.Result = ""
            }
...